我想用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
始终为空。
我是否需要手动启动焊接?
答案 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并在任何需要的地方注入服务。