java ee cdi方式的依赖注入方法_第1页
java ee cdi方式的依赖注入方法_第2页
java ee cdi方式的依赖注入方法_第3页
java ee cdi方式的依赖注入方法_第4页
java ee cdi方式的依赖注入方法_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档2016全新精品资料全新公文范文全程指导写作独家原创1/7JAVAEECDI方式的依赖注入方法JAVAEECDI主要使用INJECT注解来实现依赖注入,把受管理的BEAN注入到由容器管理的其它资源中去。在本教程中,我们将会介绍在CDI环境下几种不同的可选策略来实现依赖注入。本教程基于如下环境JDK17021WELD1110WELD是CDI的参考实现。构造器依赖注入PUBLICCLASSSOMEBEANPRIVATEFINALSERVICESERVICEINJECTPUBLICSOMEBEANSERVICESERVICETHISSERVICESERVICE当CDI容器在初始化一个SOMEBEAN类型的BEAN实例时,它将会查找该类的默认构造器无参构造器并用它来创建BEAN实例。但是有一个例外情况,就是当我们还有一个使用INJECT进行了注解的构造器时,这种情况下,容器会改用有注解的构造器而不是无参构造器,并且把通精品文档2016全新精品资料全新公文范文全程指导写作独家原创2/7过构造器参数传入的依赖资源注入到BEAN实例中来。注意记住一个类只允许有一个INJECT注解的构造器。在上面的例子中,容器将会获取到一个SERVICE的实例并把它注入到SOMEBEAN的注解构造器中。字段依赖注入PUBLICCLASSSOMEBEANINJECTPRIVATESERVICESERVICE这种情况下,当容器初始化一个SOMEBEAN类型的BEAN时,它会把一个正确的SERVICE实例注入给该字段,即使该字段是一个私有字段,并且不需要有任何SETTER方法JAVAEECDI方式的依赖注入方法JAVAEECDI方式的依赖注入方法。初始化方法依赖注入PUBLICCLASSSOMEBEANPRIVATESERVICESERVICEINJECTPUBLICVOIDSETSERVICESERVICESERVICETHISSERVICESERVICE精品文档2016全新精品资料全新公文范文全程指导写作独家原创3/7这种情况下,当容器初始化一个SOMEBEAN类型的BEAN时,它会调用所有由INJECT注解了的方法,并且通过方法参数的方式把依赖注入进来。ANY修饰符为了提供完全松耦合的应用,我们通常把接口注入到受管理的资源中。当我们有多个实现了给定接口的BEAN时该怎么办呢我们可以同时使用ANY修饰符和CDI的INSTANCE接口,来把所有该接口的实现BEAN都注入进一个受管理的BEAN中THEANYQUALIFIERPUBLICCLASSSOMEBEANINJECTPUBLICVOIDLISTSERVICEIMPLEMENTATIONSANYINSTANCESERVICELISTFORSERVICESERVICESERVICELISTSYSTEMOUTPRINTLNSERVICEGETCLASSGETCANONICALNAME精品文档2016全新精品资料全新公文范文全程指导写作独家原创4/7ANY修饰符告诉容器,任何可供使用的依赖都适用于该注入点,所以容器会把他们都注入进来。如果我们有接口的多个实现而我们只注入其中的一个并且没有做任何排除工作那么容器将会抱怨并且无法成功的初始化组件。我们将会在其他教程中介绍依赖排除问题JAVAEECDI方式的依赖注入方法文章JAVAEECDI方式的依赖注入方法出自HTTP/WWWGKSTKCOM/ARTICLE/WK78500001224270HTML,转载请保留此链接。注入到生产者方法中生产者方法的参数也可以经由CDI容器进行注入。请查看JAVAEECDIPRODUCERMETHODSTUTORIALCDI代理如果我们不涉及CDI代理机制,那么本教程将是不完整的。当我们把一个在不同于DEPENDENT范围下创建出来的BEAN注入到另外一个托管资源时,CDI容器不会注入一个被注入BEAN的直接引用。CDI中BEAN的范围请看JAVAEECDIBEANSCOPES为什么CDI使用代理因为如果BEAN的直接引用被注入,将会给被管理的BEAN造成诸如线程安全或并发访问的问题。设想一下一个SESSION范围的BEAN被注入到一个APPLICATION范围的BEAN中去的情形。由于APPLICATION精品文档2016全新精品资料全新公文范文全程指导写作独家原创5/7范围的BEAN在所有客户端间共享,如果多个客户端同时访问一个APPLICATION范围的BEAN,那么将会存在很高的风险出现这种情况一个客户端访问了其他客户端正在访问的SESSION范围的BEAN。为了处理这种问题,CDI创造了代理并把代理注入进注入点JAVAEECDI方式的依赖注入方法J2EE培训。由代理负责处理对被注入BEAN的调用,并实际去调用正确的BEAN实例。CDI创建的代理继承自被注入BEAN的类型。设想一下下面的情形APPLICATION和SESSION范围的BEANSESSIONSCOPEDPUBLICCLASSSERVICEPUBLICVOIDDOWORKSYSTEMOUTPRINTLN“WORKING”APPLICATIONSCOPEDPUBLICCLASSSOMEBEANINJECTPRIVATESERVICESERVICEPUBLICVOIDTEST精品文档2016全新精品资料全新公文范文全程指导写作独家原创6/7SERVICEDOWORKCDI将把一个SESSION范围的BEAN的代理注入进一个APPLICATION范围的BEAN中去。每一次对SESSION范围BEAN的调用,都将通过代理进行,代理会把调用重定向到正确的SESSION范围BEAN的实例,那个从属于正确的HTTPREQUESTSESSION的BEAN。CDI创建代理是通过继承原来BEAN的类,并重写所有非私有方法。一个简单的典型的代理的例子可以像下面这样CDI代理示例UBLICCLASSSERVICEPROXY_WELDCLIENTPROXYEXTENDSSERVICEOVERRIDEPUBLICVOIDDOWORKSERVICEINSTANCE/RESOLVEBEANINSTANCEINSTANCEDOWORK由于CDI代理通过继承BEAN的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论