gpt4 book ai didi

java - 如何在JavaEE(@Inject)中使用模拟@Autowired注释?

转载 作者:行者123 更新时间:2023-12-01 10:40:26 25 4
gpt4 key购买 nike

在Spring项目中我可以使用@Autowired注释。

@Service
public class DefaultUserService implements UserService {
...
@Autowired
private UserDao userDao;

但我不明白在JavaEE项目中如何做到这一点。我发现:

@注入(inject)私有(private) AvayaDao avayaDao;

但是我的avayaDao 是NULL。我尝试添加注释

@Default
public class AvayaService {
...
@Inject
private AvayaDao avayaDao;

但没有帮助。它标识了我的 Dao:

public interface AvayaDao extends BaseDao<AvayaSdr> {

List<AvayaSdr> getAll();
void insertCdr(AvayaSdr avayaSdr);
}

这是我的服务:

@Default
public class AvayaService {
private static AvayaService instance;

@Inject
private AvayaDao avayaDao;

public synchronized static AvayaService me() {
if (instance == null) {
instance = new AvayaService();
}
return instance;
}

public Set<String> selectAllLoadedAVAYAcmCDRFiles() {
Set<String> result = new HashSet<>();
List<AvayaSdr> resultList = avayaDao.getAll();
for (AvayaSdr avayaSdr : resultList) {
result.add(avayaSdr.getHashValue());
}
return result;
}

public void insertCdr(String fileHash) {
AvayaSdr avayaCmCdr = new AvayaSdr("", fileHash, 0);
avayaDao.insertCdr(avayaCmCdr);
}

java.lang.NullPointerException

最佳答案

如果您使用的是 Java EE 6,AvayaDao 必须是 EJB 并使用 @Stateless 或 @Singleton 进行注释,或者您使用 CDI 注入(inject)并且需要一个空 beans.xml 文件 ( http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html )。在 Java EE 7 中必须设置属性 bean-discovery-mode="all"( https://docs.oracle.com/javaee/7/tutorial/cdi-adv001.htm )。

更新1:

Enterprise Java Beans是用 @Stateless@Statefull@Singleton 注解的 POJOS,由应用程序服务器内的 EJB 容器管理。他们能够访问容器特定的服务,例如 TimerService、安全上下文以及事务支持和监控等方面。无状态企业 Java Bean 也由应用程序服务器汇集。

更新2:

@Tiny 你说得对,但如果 AvayaDao 不是 EJB 并且您的应用程序包含 beans.xml 文件,其中注册了拦截器或其他 CDI 特定 POJOS,则默认 bean-discovery-mode 为“注释”,并且注入(inject)将不起作用没有带注释的 POJOS 并需要显式设置“all”值( http://www.adam-bien.com/roller/abien/entry/when_your_di_breaks_bean )。如果您明确知道您的应用程序仅部署在 JAVA EE 7 环境中,则另一种选择是不使用 beans.xml。

关于java - 如何在JavaEE(@Inject)中使用模拟@Autowired注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34449876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com