wildfly - 使用带有POJO的CDI

时间:2017-02-01 17:38:44

标签: java cdi weld

我想用CDJ和POJO。

现在有一个在Wildfly 10.1.0.Final中运行的Jaxrs Resteasy webapp。

有一个返回ServiceImpl类的单例:

public class ServiceFactory {

    private static Service service = new ServiceImpl();

    public static Service getEnvsApi()
    {   
       return service;
    }
}

我想在ServiceImpl类中使用CDI

public class ServiceImpl extends Service {

   @Inject
   private MyData    myData;

   @Override
   public MyData getData()
   {
      return myData;
   }
}

myData始终为空。

我是否需要手动启动焊接?

2 个答案:

答案 0 :(得分:1)

如果您的网络应用程序在Wildfly中运行,则无需启动"焊接。只需在代码中使用CDI API并在webapp / WEB-INF中添加beans.xml(看一下CDI的bean发现模式),CDI就会被激活。

关于你的问题,问题是你通过新的运营商实例化服务,这打破了CDI! Ss在其他人的答案中说,你必须在@ApplicationScoped上使用ServiceImpl而你不需要ServiceFactory

只需将ServiceImpl声明为@ApplicationScoped

即可
@ApplicationScoped
public class ServiceImpl implements Service {

   @Inject
   private MyData    myData;

   @Override
   public MyData getData()
   {
      return myData;
   }

}

然后你可以@Inject Service

@Inject
private Service service

答案 1 :(得分:0)

您还必须在ServiceFactory中注入服务,因为如果您实例化它,它不受CDI控制。

您可以完全删除ServiceFactory并在任何需要的地方注入服务。