- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java EE CDI依赖注入教程
Java EE CDI依赖注入教程在本教程中,你将会学到几种不同的方法,用@Inject注解来实现Java EE CDI方式的依赖注入。1. 简介Java EE CDI 主要使用@Inject注解来实现依赖注入,把受管理的bean注入到由容器管理的其它资源中去。在本教程中,我们将会介绍在CDI环境下几种不同的可选策略来实现依赖注入。本教程基于如下环境:JDK 1 Weld 1.1.10 Weld 是CDI 的参考实现。2. 构造器依赖注入public?class?SomeBean?{???????????????private?final?Service?service;?????????????@Inject???????public?SomeBean(Service?service){?????????this.service?=?service;???????}???????????}?当CDI容器在初始化一个SomeBean类型的bean实例时,它将会查找该类的默认构造器(无参构造器)并用它来创建bean实例。但是有一个例外情况,就是当我们还有一个使用@Inject?进行了注解的构造器时,这种情况下,容器会改用有注解的构造器而不是无参构造器,并且把通过构造器参数传入的依赖资源注入到bean实例中来。注意: 记住一个类只允许有 一个@Inject注解的构造器。在上面的例子中,容器将会获取到一个Service?的实例并把它注入到SomeBean?的注解构造器中。3. 字段依赖注入public?class?SomeBean?{???????????????@Inject???????private?Service?service;???????????}?这种情况下,当容器初始化一个?SomeBean类型的bean时,它会把一个正确的Service实例注入给该字段,即使该字段是一个私有字段,并且不需要有任何setter方法。4. 初始化方法依赖注入public?class?SomeBean?{???????????????private?Service?service;???????????????@Inject???????public?void?setService(Service?service)?{?????????this.service?=?service;???????}???????????}?这种情况下,当容器初始化一个?SomeBean类型的bean时,它会调用所有由@Inject注解了的方法,并且通过方法参数的方式把依赖注入进来。@Any 修饰符为了提供完全松耦合的应用,我们通常把接口注入到受管理的资源中。当我们有多个实现了给定接口的bean时该怎么办呢?我们可以同时使用@Any修饰符和CDI的Instance接口,来把所有该接口的实现bean都注入进一个受管理的bean中:The @Any qualifier ?public?class?SomeBean?{???????????????@Inject???????public?void?listServiceImplementations(???????????@Any?InstanceService?serviceList)?{???????????????for(Service?service?:?serviceList){???????????System.out.println(service.getClass().getCanonicalName());?????????}?????????????}?????}?@Any?修饰符告诉容器,任何可供使用的依赖都适用于该注入点,所以容器会把他们都注入进来。 如果我们有接口的多个实现而我们只注入其中的一个 - 并且没有做任何排除工作 - 那么容器将会抱怨并且无法成功的初始化组件。我们将会在其他教程中介绍依赖排除问题。?6.注入到生产者方法中?生产者方法的参数也可以经由CDI容器进行注入。请查看Java?EE?CDI?Producer?methods?tutorial.?7.?CDI?代理?如果我们不涉及CDI代理机制,那么本教程将是不完整的。当我们把一个在不同于@Dependent范围下创建出来的bean注入到另外一个托管资源时,CDI容器不会注入一个被注入bean的直接引用。?CDI?中bean?的范围请看?Java?EE?CDI?bean?scopes为什么CDI使用代理??因为如果bean的直接引用被注入,将会给被管理的bean造成诸如线程安全或并发访问的问题。设想一下一个Session?范围的 bean被注入到一个Application范围的bean中去的情形。由于application
文档评论(0)