Dozer 的文档指出,您应该只在服务器上的应用程序中运行一个 DozerBeanMapper 实例。对于最初的开发,我忽略了这一点,现在我想更新应用程序来做到这一点。
当应用程序在 glassfish 上启动时,如何实例化 DozerBeanMapper 类,以及一旦应用程序启动或新部署后,我将如何在另一个类中访问其“map”方法?
这是针对 EJB 的,所以我不能使用任何 servlet 来执行此操作。
好的,所以我终于有时间重构这段代码了。使用来自@Mikko Maunu 的指针,我正在编辑我的问题,以便为将来可能会发现它有用的任何人提供我为我工作的代码。
package com.xyz.utilities.singleton;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.dozer.DozerBeanMapper;
@Startup
@Singleton
public class DozerInstantiator {
private DozerBeanMapper mapper = null;
@PostConstruct
void init() {
mapper = new DozerBeanMapper();
}
public DozerBeanMapper getMapper() {
return mapper;
}
}
这是一个简单的用例:
将 EJB 成员变量注入您的客户端类:
@EJB
DozerInstantiator di;
在客户端类的某个方法中,您可以像这样调用推土机映射器:
Credentials credentials = di.getMapper().map(credentialsDTO, Credentials.class);
// or
Credentials credentials = new Credentials();
di.getMapper().map(credentialsDTO, credentials);
如果这是错误的或不正确的,请有人发表评论。在那之前,这似乎可行,所以我将使用我根据 Mikko 的意见开发的这个解决方案。