当一个资源注解防止在一个字段或setter方法之上时,将会发生两件事。首先,就像放置在bean类之上一样声明资源引用(类似于上文中的代码示例),而且当创建组件时将把资源名称绑定到环境命名上下文。第二,该服务器将为您自动进行依赖性查找,并把结果设置到实例化的类中。

自动超找一个资源并将它设置到类中的过程称之为依赖性注入(dependency injection)因为据说服务器将把解析的依赖性注入类中。这种技术,其中一项通常称作控制反转(inversion of control),消除了手动从JNDI环境上下文中查找资源的负担。依赖性注入被认为是应用程序开发的最佳实践,不仅是因为它减少JNDI查找的需要(和相关的服务定位器模式),而且还因为它简化了测试。类中没有任何的JNDI API代码依赖于应用服务器运行时环境,因此,bean类可以在一个单元测试中直接实例化。开发人员可以手动提供所需的依赖性并测试试待检查类的功能,而不用担心如何围绕JNDI API进行工作。

字段注入

第一种形式的依赖性注入称之为字段注入(field injection)。注入依赖性到字段意味着,服务器在环境命名上下文查找依赖之后,它直接把结果分配给类的注解字段。下面代码重新审视了来自上面文章的代码示例,并演示了@EJB注解,这次把结果注入audit字段。我们之前演示的所有目录接口代码中,bean的业务方法可以假设audit字段中保留了AuditService bean的引用。

(代码)

字段注入当然最容易实现,本书的例子中使用这种形式完全是为了节省空间。字段注入唯一需要考虑的是:如果您正在计划单元测试,那么您需要添加一个setter方法或使得这个字段是您的单元测试可访问的,以手动满足依赖性。尽管自由字段是合法的,但是如果没有可访问的方法,那么将需要令人不快的黑客手段来设置它们的值。如果您希望单元测试不必添加一个setter方法,那么请考虑字段注入的包(package)的范围。

在上一节曾提到,当把一条资源注解放在一个字段或setter方法之上时,将引用自动生成的一个名称,为了完整起见,这里将描述此名称的格式,但是您不太可能有很多机会来使用它。生成的名称完全限定为类名,后跟一条正斜杠,然后是字段或属性的名称。这意味着如果AuditService bean位于persistence.session包中,那么上面程序中引用的注入EJB在“persistence.session.AuditService/audit”名称之下的环境命名上下文中将是可访问的。对资源注解指定name元素将覆盖此默认值。

setter注入

第二种形式的依赖性注入,称为setter注入(setterinjection),它涉及注解一个setter方法而不是类的字段。当服务器解析引用时,它将利用查询的结果调用带注解的setter方法。下面代码最后一次审视了上面的代码以演示setter注入的使用。

(代码)

这种样式的注入允许使用私有字段,但同样也适用于单元测试。每个测试可以简单地实例化bean类,并通过调用setter方法以手动执行该依赖性注入,通常会为该setter方法提供符合测试所需资源的实现。

JavaEE中的依赖性——依赖性注入相关推荐

  1. java依赖什么意思,JavaEE中的依赖性——依赖查找

    关于依赖性管理我们要介绍的第一个策略就是依赖查找(dependency lookup).这种策略是JavaEE中传统形式的依赖性管理,这里可以看到JavaEE规范中的JNDI(Java Naming ...

  2. 关于mysql注入说法正确的是_1. 在 Spring中,下列关于 依赖注入 的 说法 , 正确的是( ) 。_学小易找答案...

    [简答题]1基本流程练习 2时间轴嵌套 3简单应用 [简答题]请解释什么是MVC? [多选题]在 Hibernate 中,下 列 说法正确的有 [多选题]1. 关于 Spring,下列说法不正确的是( ...

  3. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  4. spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常

    spring-boot框架dubbo在controlle中r注解@Reference注入service,但是调用方法时候,service报null空指针异常 参考文章: (1)spring-boot框 ...

  5. 避免在 ASP.NET Core 3.0 中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...

  6. javaee 中遇到的jdk自带的异常(Exception)

    javaee 中遇到的异常(Exception) 如果输入了类型不匹配的数据,则会报InputMismathException(输入不匹配异常) 如果访问超过数组范围的下标将会报数组下标越界异常:Ar ...

  7. SQL Server应用程序中的高级SQL注入

    作者:不详 来源:techtarget http://www.csai.cn 2006年5月11日 摘要:这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台.它 ...

  8. SQL Server应用程序中的高级SQL注入[转]

    SQL Server应用程序中的高级SQL注入[从A.Z的POST里转载,经过整理] 作者:Chris Anley[chris@ngssoftware.com] An NGSSoftware Insi ...

  9. 谷歌力作:神经网络训练中的Batch依赖性很烦?那就消了它!

    点击上方↑↑↑"视学算法"关注我 来源:公众号 量子位 授权转 再见了,批量依赖性(Batch Dependence). 优化神经网络方法千千万,批量归一化(Batch Norma ...

  10. oracle中dbms_DBMS中的功能依赖性和属性关闭

    oracle中dbms 功能依赖 (Functional Dependency) A relational Database management System (RDBMS) represents ...

最新文章

  1. 收藏 | 卷积神经网络中用1*1 卷积有什么作用或者好处呢?
  2. mysql数据库什么是事件_MySQL数据库之mysql 事件(Event) 总结
  3. Ansj中文分词Java开发词性分类
  4. 在Windows环境下配置QT Creator 读取NC文件(NetCDP,C++接口)
  5. 海量存储系列下--转载,值得一读
  6. 多表联合查询存储过程
  7. 【超经典】Java多态有什么好处?怎样用?
  8. java jstat gc_分析JVM GC及内存情况的方法
  9. 利用ES6-Promise()方法封装原始jsonp实现跨域请求公用方法(告别使用JQuery封装好的jsonp)
  10. 梅特勒托利多xk3124电子秤说明书_托利多电子秤设置说明书1
  11. 基于JAVA疫情防控期间网上教学管理计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  12. win7怎么查找网络上的计算机,Win7系统无法查看工作组计算机如何解决? Win7系统查看工作组计算机的方法...
  13. nginx的安装升级、常用配置(二)
  14. Mac 使用ab命令压测配置及使用总结
  15. 希捷2T 2碟 硬盘 U盘 ghost 安装 深度win7 64位系统
  16. bzoj3047: Freda的传呼机bzoj2125: 最短路
  17. 如何打开安卓模拟器里的开发者选项
  18. 单片机与ARM嵌入式区别
  19. Tomcat核心原理学习总结(二)
  20. JS课程分享(7.函数)

热门文章

  1. java 加密并打包_java实现将多个文件打包成zip压缩文件以及对压缩文件的加密
  2. “刷脸”乘地铁,AI 诸雄的又一个掘金高地
  3. java 运行器_[原创]我也来做一个最简单的Java2EXE的运行器
  4. 硬盘(IDE硬盘与SCSI硬盘)在Linux标识的命名规则
  5. qt:cannot open C:\Users\某某某\AppData\Local\Temp\main.obj.15576.16.jom for write
  6. flashfxp中文下载,5步掌握flashfxp中文下载软件的使用技巧
  7. boseqc35能不能连电脑_boseQC35耳机不能连接win10电脑如何解决
  8. tensorflow2系类知识-4 :RNN
  9. Minimum supported Gradle version is 6.7.1. Current version is 5.4.1. Please fix the project‘s Gradl
  10. 全息眼镜HoloLens可快速捕捉真人3D图像