★ 什么是资源?
开发过程中与业务无关的服务、类的实例或者变量的值。比如:Apusic J2EE应用服务器管理的JDBC服务是资源,用户开发的EJB、WebService是资源、用户定义的配置文件也是资源。

★ 为什么要资源注入?
大多数企业级java应用程序都使用了诸如DataSources,EJBs或WebService的外在的资源和服务,在J2EE 1.4中,用户必须在部署描述符中明确声明所依赖的资源或者使用JNDI的lookup方法去获得资源的引用。

最初目的是为了减少应用与资源的依赖度,具体可以参考IoC(控制反转)和DI(依赖注入),但现在作者认为优点很多:
1. 减少应用与资源的依赖度,便于应用的后期组装。例如:将数据库连接池在后期组装时作为资源注入到系统中,这样使应用在开发过程中不会与资源绑定。
2. 简化应用的复杂度,使程序员开发中更多关注业务。例如:通过标注将资源在变量定义的时候注入进去,开发人员直接可以使用变量,而无须再通过代码获得。
3. 规范应用的开发过程,提升应用后期运行的稳定性。例如:通过注入的方式使用资源,而无须在开发期管理资源的生命周期以及创建与销毁,避免出现重复创建或者内存泄漏。

★ 哪些资源可以注入?
数据源、JMS目的地、环境变量、EJB、WebService、上下文资源、Managed Bean、Spring Bean、LocalString

★ 如何注入和使用资源?
 // Apusic系统日志,采用的是JDK 1.4的日志系统
 @Inject
 private java.util.logging.Logger logger;
 public void IndexBean() {
  logger.info("初始化IndexBean!");
 }

// JavaServer Faces的相关资源
 // JSF的FacesContext
 @Inject
 private javax.faces.context.FacesContext fContext;
    // 获取应用的HttpRequest
    HttpServletRequest request=(HttpServletRequest)fContext.getCurrentInstance().getExternalContext().getRequest();
    // 获取应用的HttpResponse
    HttpServletResponse request=(HttpServletResponse)fContext.getCurrentInstance().getExternalContext().getResponse();
    // 获取应用的HttpSession
    HttpSession session=(HttpSession) fContext.getCurrentInstance().getExternalContext().getSession(true);
    // JSF的服务器实例
 @Inject
 private javax.faces.application.Application app;
 // JSF的导航句柄
 @Inject
 private javax.faces.application.NavigationHandler nHandler;
 // JSF的EL表达式工厂实例
 @Inject
 private javax.el.ExpressionFactory expFactory;
 // JSF的事件广播者实例
 @Inject
 private org.operamasks.faces.event.EventBroadcaster event;
 // 相同生命周期的ManagedBean,参考CRUD例子
 @Inject
 private IndexBean indexBean;

// JNDI资源注入
 // 数据库连接池资源注入
 @Resource(mappedName = "jdbc/CRUD")
 private javax.sql.DataSource CRUD;
   Connection con = CRUD.getConnection();
 // 消息工厂资源注入
 @Resource(mappedName="jms/ConnectionFactory")
 private javax.jms.ConnectionFactory connFactory;
 // 消息主题资源注入
 @Resource(mappedName="testTopic")
 private javax.jms.Topic topic;
 // 消息队列资源注入
 @Resource(mappedName="testQueue")
 private javax.jms.Queue queue;
 // 事务服务资源注入,一个线程只提供一个事务服务,因此不需要提供名称直接可以注入
 @Resource
 private javax.transaction.UserTransaction tx;
 
 // EJB资源注入
 @EJB(name="com.apusic.examples.crud.second.service.PersonService")
 IPersonService personService;
 
 // 资源文件的注入,注意:只能注入前缀为LocalStrings的文件组
 @LocalString
 private Map<String, String> messages;
 messages.get("WindowBean.email.required");
 
    // 配置文件注入上下文资源
    在faces-config.xml中在需要注入的bean中加入managed-property属性和值
 <managed-bean>
  <managed-bean-name>windowBean</managed-bean-name>
  <managed-bean-class>
   com.apusic.examples.crud.second.bean.WindowBean
  </managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
  <managed-property>
   <property-name>injectName</property-name>
   <property-class>java.lang.String</property-class>
   <value>Operamasks</value>
  </managed-property>
 </managed-bean>
 在WindowBean.java中直接定义
 private String injectName;
 public void setInjectName(String injectName) { // 通过这个函数提供资源注入
  this.injectName = injectName;
 }
★ 参考资料
http://www.matrix.org.cn/resource/article/2006-04-05/Dependency+Injection_44321.html

★ 备注
本文现在只介绍了基础资源注入知识,随着作者本人对资源注入的理解,将会继续补充与完善。

转载于:https://www.cnblogs.com/zhuyx/archive/2008/07/30/10401957.html

Apusic Operamasks的资源注入相关推荐

  1. JavaEE 资源注入

    传统的资源注入采用JNDI注入方式: InitialContext initCtx = new InitialContext();// Perform JNDI lookup to obtain th ...

  2. om.sun.faces.mgbean.ManagedBeanCreationException: 对受管 bean xxx执行资源注入 (resource injection

    记录一下这个报错 Error 500--Internal Server Error com.sun.faces.mgbean.ManagedBeanCreationException: 对受管 bea ...

  3. Java EE 7中的资源和依赖注入

    1.概述 上下文和依赖注入(CDI)是Java EE的一项功能,可帮助融合Java EE 6和更高版本中包含的平台的Web层和事务层. 从技术角度来看,这意味着CDI提供了依赖项注入框架,并且还管理了 ...

  4. webpack静态资源地址注入html,Webpack4+ 多入口程序构建

    欢迎关注富途web开发团队,缺人从众 其实,说实话这篇文章的由来也是有很多的原因在里面的.在这之前,我也做过不少的项目.有新的项目,也有旧的项目.通过对旧项目的不断研究,改进.再结合自己的理解,将新的 ...

  5. ioc基础(视图,资源,assert注入)-dhroid文档

    上一节 Android 极速开发框架 dhroid来了 1 ioc即控制反转. 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦 ...

  6. SpringBoot注入数据的方式

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:胖先森 juejin.im/post/5c1f119ee51 ...

  7. Spring Boot系列四 Spring @Value 属性注入使用总结一

    @Value注入 不通过配置文件的注入属性的情况 通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanI ...

  8. AngularJS依赖注入

    文中内容基本上来自<AngularJS权威教程> 一个对象通常有三种方式可以获得对其依赖的控制权: 在内部创建依赖 通过全局变量进行引用 在需要的地方通过参数进行传递 依赖注入是通过第三种 ...

  9. (Spring)依赖注入

    文章目录 1. 概念 2. 构造器注入 3. Set注入 3.1 环境搭建 3.2 注入方式 4. p命名和c命名注入 5. Bean的作用域 5.1 singleton 5.2 prototype ...

最新文章

  1. Sublime Text 2 和 Verilog HDL
  2. open*** 启动报错
  3. LayoutInflate部分源码解析
  4. python 堆排序的两种实现
  5. 【20171123】【GITC精华演讲】贝业新兄弟李济宏:如何做到企业信息化建设的加减乘除...
  6. bzoj1041 [HAOI2008]圆上的整点 gcd
  7. 一种快速部署开发用oracle的办法
  8. 【转】CSS3 圆角 阴影 渐变 透明 旋转等功能详述
  9. 语言题库安装包312mb_大学为什么要考取计算机二级,以后很需要,附二级Msoffice题库...
  10. Spring RestTemplate的使用(解决put,delete方法无返回值问题)
  11. mw150um 驱动程序win10_Intel网卡驱动Win10专版 64位
  12. 编辑,修改chm帮助文档,无需修改繁琐的html文件,可以直接编辑修改chm
  13. 机房收费系统——可行性分析报告
  14. c语言short a=32768,C语言中short整型资料的范围“-32768——32767”中的“-32768”是如何确定的?...
  15. 《中国医学大成》目录
  16. 将PNG序列帧图片合成视频
  17. OSDev——Bare Bones
  18. ArrayList源码翻译
  19. Split()拆分字符串与StringTokenizer拆分字符串
  20. 通过xmail构建本地电子邮件测试环境

热门文章

  1. libjpeg-turbo在Windows VS2010下的编译
  2. 【算法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  3. 【kafka】kafka 零拷贝 技术
  4. 【Java】为什么 StringBuilder 不是线程安全的
  5. 【registry】registry An exception was thrown while processing request with message
  6. 【Kafka】Kafka IllegalArgumentException: Could not find a ‘KafkaClient‘ entry in the JAAS configuratio
  7. Mac :谷歌浏览器 NET::ERR_CERT_INVALID 此证书已被撤消。网络错误和攻击行为通常是暂时的,因此,此网页稍后可能会恢复正常
  8. 【Spring】Spring 父子容器
  9. 95-225-040-源码-广播-简介
  10. 【Antlr】rule expr: must label all alternatives or none