Apusic Operamasks的资源注入
★ 什么是资源?
开发过程中与业务无关的服务、类的实例或者变量的值。比如: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的资源注入相关推荐
- JavaEE 资源注入
传统的资源注入采用JNDI注入方式: InitialContext initCtx = new InitialContext();// Perform JNDI lookup to obtain th ...
- om.sun.faces.mgbean.ManagedBeanCreationException: 对受管 bean xxx执行资源注入 (resource injection
记录一下这个报错 Error 500--Internal Server Error com.sun.faces.mgbean.ManagedBeanCreationException: 对受管 bea ...
- Java EE 7中的资源和依赖注入
1.概述 上下文和依赖注入(CDI)是Java EE的一项功能,可帮助融合Java EE 6和更高版本中包含的平台的Web层和事务层. 从技术角度来看,这意味着CDI提供了依赖项注入框架,并且还管理了 ...
- webpack静态资源地址注入html,Webpack4+ 多入口程序构建
欢迎关注富途web开发团队,缺人从众 其实,说实话这篇文章的由来也是有很多的原因在里面的.在这之前,我也做过不少的项目.有新的项目,也有旧的项目.通过对旧项目的不断研究,改进.再结合自己的理解,将新的 ...
- ioc基础(视图,资源,assert注入)-dhroid文档
上一节 Android 极速开发框架 dhroid来了 1 ioc即控制反转. 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦 ...
- SpringBoot注入数据的方式
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:胖先森 juejin.im/post/5c1f119ee51 ...
- Spring Boot系列四 Spring @Value 属性注入使用总结一
@Value注入 不通过配置文件的注入属性的情况 通过@Value将外部的值动态注入到Bean中,使用的情况有: 注入普通字符串 注入操作系统属性 注入表达式结果 注入其他Bean属性:注入beanI ...
- AngularJS依赖注入
文中内容基本上来自<AngularJS权威教程> 一个对象通常有三种方式可以获得对其依赖的控制权: 在内部创建依赖 通过全局变量进行引用 在需要的地方通过参数进行传递 依赖注入是通过第三种 ...
- (Spring)依赖注入
文章目录 1. 概念 2. 构造器注入 3. Set注入 3.1 环境搭建 3.2 注入方式 4. p命名和c命名注入 5. Bean的作用域 5.1 singleton 5.2 prototype ...
最新文章
- Sublime Text 2 和 Verilog HDL
- open*** 启动报错
- LayoutInflate部分源码解析
- python 堆排序的两种实现
- 【20171123】【GITC精华演讲】贝业新兄弟李济宏:如何做到企业信息化建设的加减乘除...
- bzoj1041 [HAOI2008]圆上的整点 gcd
- 一种快速部署开发用oracle的办法
- 【转】CSS3 圆角 阴影 渐变 透明 旋转等功能详述
- 语言题库安装包312mb_大学为什么要考取计算机二级,以后很需要,附二级Msoffice题库...
- Spring RestTemplate的使用(解决put,delete方法无返回值问题)
- mw150um 驱动程序win10_Intel网卡驱动Win10专版 64位
- 编辑,修改chm帮助文档,无需修改繁琐的html文件,可以直接编辑修改chm
- 机房收费系统——可行性分析报告
- c语言short a=32768,C语言中short整型资料的范围“-32768——32767”中的“-32768”是如何确定的?...
- 《中国医学大成》目录
- 将PNG序列帧图片合成视频
- OSDev——Bare Bones
- ArrayList源码翻译
- Split()拆分字符串与StringTokenizer拆分字符串
- 通过xmail构建本地电子邮件测试环境
热门文章
- libjpeg-turbo在Windows VS2010下的编译
- 【算法】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
- 【kafka】kafka 零拷贝 技术
- 【Java】为什么 StringBuilder 不是线程安全的
- 【registry】registry An exception was thrown while processing request with message
- 【Kafka】Kafka IllegalArgumentException: Could not find a ‘KafkaClient‘ entry in the JAAS configuratio
- Mac :谷歌浏览器 NET::ERR_CERT_INVALID 此证书已被撤消。网络错误和攻击行为通常是暂时的,因此,此网页稍后可能会恢复正常
- 【Spring】Spring 父子容器
- 95-225-040-源码-广播-简介
- 【Antlr】rule expr: must label all alternatives or none