注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> J2EE >> J2ee核心 >> Java正文

Apusic Operamasks的资源注入

文章来源:blogjava.net 作者:Apusic初… 更新时间:2008-8-23 14:38:19 【 】 【加入收藏

    ★ 什么是资源?

    开发过程中与业务无关的服务、类的实例或者变量的值。比如: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

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     Flash、HTML、Ajax 谁将赢得Web应用之战
     超越XML和JSON:YAML,Java开发人员的新选择
     优秀Java程序员必须了解的GC工作原理
     Java 6 RowSet 使用完全剖析
     pureQuery带注释的方法风格简介
     面向Java开发人员的Scala指南: 实现继承
     Java 6中的性能优化
     Java实现Windows的dir命令
     Java标准类库提供的容器总结
     在Tomcat上开发Web应用如何保证兼容性
    最 新 推 荐
     对J2EE应用系统分层设计的思考
     Apusic Operamasks的资源注入
     关于J2EE中的乱码解决
     排序链树搜索算法在GIS POI关键字搜索中的应…
     Java异常处理:如何避免重复打印异常
     JLDAP 连接池的创建及测试程序
     Java Persistence API (JPA) 的陷阱
     通过JMX来获得web service的信息
     如何才算掌握了Java EE
     分散关注的编程方法 AOP
    相 关 文 章

    pureQuery带注释的方法风格简介
    Apache Tomcat处理用户请求数据存在输入验证…
    Java中关于XML的API惊鸿一瞥
    Java中利用通讯API编写短信软件
    JAVA (Jsp)利用Google的Translate开发API
    JLDAP 连接池的创建及测试程序
    Java Persistence API (JPA) 的陷阱
    Servlet中文API文档
    关于HashMap(哈希图)
    JDK5.0垃圾收集优化之--Dont Pause

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用