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

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

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

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    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

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

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

    主站蜘蛛池模板: 久久久国产精品亚洲一区| 国产成人亚洲精品蜜芽影院| 18禁无遮挡无码网站免费| 亚洲AV无码成人网站在线观看| jlzzjlzz亚洲乱熟在线播放| 精品国产污污免费网站aⅴ| 精品久久亚洲一级α| 亚洲国产AV无码专区亚洲AV| 无码一区二区三区免费视频| 两个人日本免费完整版在线观看1| 亚洲精彩视频在线观看| www国产亚洲精品久久久| 又大又硬又爽又粗又快的视频免费| 亚洲成在人线在线播放无码| 国产AV无码专区亚洲AV毛网站| 性盈盈影院免费视频观看在线一区| 中国国产高清免费av片| 亚洲熟妇久久精品| 亚洲AV区无码字幕中文色| 国产免费人成视频在线观看 | 亚洲精品视频在线观看视频| 国产成人免费a在线资源| 69视频免费在线观看| 一边摸一边爽一边叫床免费视频| 亚洲日本在线免费观看| 国产亚洲精品精品国产亚洲综合| 男人的好免费观看在线视频| 无码成A毛片免费| 国产精品免费在线播放| 亚洲jizzjizz在线播放久| 亚洲A∨无码无在线观看| 亚洲国产综合精品中文字幕| 最近免费中文字幕4| 2021精品国产品免费观看| 中文字幕av免费专区| 在线观看亚洲电影| 亚洲男人天堂2018av| 亚洲综合色丁香麻豆| 亚洲成a人片77777kkkk| 亚洲五月午夜免费在线视频| 四虎影在线永久免费观看|