<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java, Only Java!

    統(tǒng)計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    Apusic Operamasks的資源注入

    ★ 什么是資源?
    開發(fā)過程中與業(yè)務無關的服務、類的實例或者變量的值。比如:Apusic J2EE應用服務器管理的JDBC服務是資源,用戶開發(fā)的EJB、WebService是資源、用戶定義的配置文件也是資源。


    ★ 為什么要資源注入?
    大多數企業(yè)級java應用程序都使用了諸如DataSources,EJBs或WebService的外在的資源和服務,在J2EE 1.4中,用戶必須在部署描述符中明確聲明所依賴的資源或者使用JNDI的lookup方法去獲得資源的引用。

    最初目的是為了減少應用與資源的依賴度,具體可以參考IoC(控制反轉)和DI(依賴注入),但現在作者認為優(yōu)點很多:
    1. 減少應用與資源的依賴度,便于應用的后期組裝。例如:將數據庫連接池在后期組裝時作為資源注入到系統(tǒng)中,這樣使應用在開發(fā)過程中不會與資源綁定。
    2. 簡化應用的復雜度,使程序員開發(fā)中更多關注業(yè)務。例如:通過標注將資源在變量定義的時候注入進去,開發(fā)人員直接可以使用變量,而無須再通過代碼獲得。
    3. 規(guī)范應用的開發(fā)過程,提升應用后期運行的穩(wěn)定性。例如:通過注入的方式使用資源,而無須在開發(fā)期管理資源的生命周期以及創(chuàng)建與銷毀,避免出現重復創(chuàng)建或者內存泄漏。

    ★ 哪些資源可以注入?
    數據源、JMS目的地、環(huán)境變量、EJB、WebService、上下文資源、Managed Bean、Spring Bean、LocalString

    ★ 如何注入和使用資源?
    ?// Apusic系統(tǒng)日志,采用的是JDK 1.4的日志系統(tǒng)
    ?@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

    ★ 備注
    本文現在只介紹了基礎資源注入知識,隨著作者本人對資源注入的理解,將會繼續(xù)補充與完善。

    posted on 2008-07-30 23:58 zYx.Tom 閱讀(1199) 評論(0)  編輯  收藏 所屬分類: 1.Java世界

    主站蜘蛛池模板: 日韩在线观看视频免费 | 精品日韩亚洲AV无码一区二区三区 | 黄色三级三级免费看| 114一级毛片免费| 亚洲国产一区在线| 亚洲永久在线观看| 成人人观看的免费毛片| 国产亚洲色婷婷久久99精品| 91丁香亚洲综合社区| 亚洲一区免费在线观看| 亚洲日本一区二区三区在线不卡| 亚洲日产2021三区| 国产免费毛不卡片| 亚洲成av人片天堂网无码】| 9277手机在线视频观看免费| 亚洲综合精品网站| 东方aⅴ免费观看久久av| 久久精品国产96精品亚洲| 18级成人毛片免费观看| 亚洲中文精品久久久久久不卡| 免费无码成人AV片在线在线播放| 精品国产亚洲第一区二区三区| 亚洲国模精品一区| 猫咪免费观看人成网站在线| 久久久青草青青国产亚洲免观 | 四虎成人精品在永久免费| 成人免费网站久久久| 亚洲阿v天堂在线| 波霸在线精品视频免费观看| 凹凸精品视频分类国产品免费| 免费的黄网站男人的天堂| 久久久亚洲欧洲日产国码农村| 2015日韩永久免费视频播放| 亚洲日韩一区二区一无码| 久久亚洲国产精品123区| 1000部国产成人免费视频| 亚洲色大成网站www尤物| 亚洲第一网站男人都懂| 九九精品国产亚洲AV日韩| 亚洲男同帅GAY片在线观看| A国产一区二区免费入口|