【发布时间】:2017-04-04 10:39:36
【问题描述】:
我是 DI 新手,但突然需要在我的 EJB 应用程序中使用它,所以我尝试重新制作它。
该方法包括具有 2 个字段的容器类 - 2 个实现。它可以根据参数与一个或两个实现一起使用。该容器是在单例的方法调用中创建的,但由其他 ejb bean 使用。
这里我需要帮助 - 如何使 SecurityContainer 类与其他 CDI 托管类(ejb bean)正常工作或成为 CDI 托管类?
我给出了一个旧的(非 CDI)代码,它是如何工作的。读取参数并实例化容器:
@Singleton
public class MySingleton {
private static final MySingleton instance = new MySingleton();
private volatile SecurityHelper securityHelper; // container
public void setSecurityHelper(SecurityHelper secHelper){ securityHelper=secHelper; }
public SecurityHelper getSecurityHelper(){ return securityHelper; }
/* now it has some @Inject....*/
public void start(String passwordP, String passwordH)
.....
// application work with one or two implementations of security
if ("P".equals(DbParams.getServerSecurityFlag()))
instance.setSecurityHelper(new SecurityContainer(new SecurityHelperImplP(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance()),
null));
else
instance.setSecurityHelper( new SecurityContainer( new SecurityHelperImplP(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance()),
new SecurityHelperImplH(DbWorkerImpl.getInstance(), ResponseBuilderImpl.getInstance()) ) );
securityHelper.createSecurity(passwordP, passwordH);
这里是容器类:
public class SecurityContainer implements SecurityHelper {
private SecurityHelper secPrg;
private SecurityHelper secHard;
public SecurityContainer(SecurityHelper secPrg, SecurityHelper secHard){
this.secPrg=secPrg;
this.secHard=secHard;
}
具体实现现在必须注入 DbWorker 和 ResponseBuilder ejb bean。 SecurityHelperImplH 看起来一样。
public class SecurityHelperImplP implements SecurityHelper {
private SecurityPrg securityPrg = null;
private DbWorker ora; // now they are CDI managed
private ResponseBuilder builder;
public SecurityHelperImplP(DbWorker dbworker, ResponseBuilder bld){
this.ora = dbworker;
this.builder = bld;
}
我认为我需要资格赛,也许还需要一名制片人,但无法将这些点联系起来
【问题讨论】:
标签: java containers cdi java-ee-7 inject