当前位置: 首页 > 知识库问答 >
问题:

使用JEE的CDI:如何在没有EJB的情况下处理后端中的依赖注入

侯令雪
2023-03-14

还有,在这种情况下如何使用CDI?@named在类中,@inject在字段中?我有一些同事说@named应该只与JSF一起使用,但我是一个大三学生,正在寻找这个问题的真相,在研究了很多之后,我仍然不知道如何处理这个问题,我需要任何帮助。谢谢!

共有1个答案

督嘉言
2023-03-14

我需要用于事务的EJB吗?

如果您使用的是JEE-7+,那么您可以将@Transactional用于CDI bean,而不是使用@Stateless、@TransactionManagement和@TransactionAttribute的EJB-Beans。@transactional提供了与@TransactionAttribute相同的属性,并使任何CDI Bean成为事务性的,而不需要EJB容器。所有这些方法都需要使用JPA,对于一个简单的查询来说,这可能是一种过度使用。

https://docs.oracle.com/javaee/7/api/javax/transaction/transactional.html

@named使CDI bean可以通过它们定义的名称对Java-EL进行访问,如果没有定义,则通过它们的简单类名进行访问。您还可以使用@named来区分实现,但我认为CDI限定符更适合实现这一点。所以,如果你不需要它,那就不要注释它。

如何将CDI bean提供给其他CDI bean?

在我看来,CDI bean应该通过字段而不是构造函数参数注入。在构造函数参数中进行注入是因为可测试性,所以您可以在不使用CDI的情况下测试bean,现在这已经不是很难实现了。

 类似资料:
  • 我已经将正式用Java编写的JEE应用程序中的REST资源转换为Kotlin。该应用程序在Wildfly应用程序服务器中运行,使用Weld作为依赖项注入框架。 这是我想出的最终实现: setter用于测试目的。对于Mockito或其他可以设置私有字段的mocking框架,这不是必需的。 我在这个实现上遇到了一些问题: < li >我必须将类和所有方法更改为< code>open,以允许CDI容器为

  • 我正在尝试安装一个没有依赖项的python模块。 我跑: 但是这个安装依赖项,任何想法怎么能做到这一点?

  • 问题内容: 如果你看一下课堂上的代码,我有两个问题: 服务器启动时,如果我在此类的构造函数中放置一个断点,就像在构造函数中那样,它是由spring使用配置的bean 提供的。但是,构造函数上没有注释,那么,在这个世界中如何以正确的依赖关系调用该构造函数?应该是null。 这是Spring Boot的自动假设吗? Spring是否看到“私有字段+构造函数参数”,并且假定它应该寻找合适的bean? 是

  • 问题在于,当我通过工件spring-boot-maven-plugin用maven编译服务时,.war文件内部总是有依赖关系。因为我想知道是否有人知道如何配置maven来删除.war文件中的依赖项......穿着春靴。 war随后出现了里面的依赖关系,经过编辑:我已经添加了提供的,就像Michael Potter所说的和执行一样。很好用。我的pom.xml如下:

  • 我有一个简单的Quarkus资源: 我试图将实例注入到我的资源中,但是我得到了一个。但是,如果我在上使用注释,那么一切都很好。是否有一种方法可以在不使用注释的情况下将类注入到我的资源中?换句话说,是否有一种方法可以使Quakus容器可以发现而不直接注释该类? 编辑:查看CDI文档,似乎可以使用带有注释的方法手动注册bean。但是,我不清楚哪个类应该包含带注释的方法) 另一个选择是使用Jandex索