亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

spring階段性的一點感受

2019-11-18 11:32:37
字體:
來源:轉載
供稿:網友

一直不能坐下來好好學習一下, 最近研究了sPRing framework, 一點感受:

1. IOC

傳統方法:假如動態設置一個對象屬性,可以借助java的Reflection機制完成,invoke()激活返回調用

Class cls = Class.forName("com.eking.User");

Method mtd = cls.getMethod("setName",new Class[]{String.class});

Object obj = (Object)cls.newInstance();

mtd.invoke(obj,new Object[]{"Erica"});

return obj;

        在spring中, 面向接口編程,動態代理機制:BeanWrapper, BeanFactory,applicationContext提供了治理javabean的包裝器,所有的一切都在容器中配置,dependency injection.

也可以不提供接口,CGLib與Dynamic Proxy的代理機制基本類似,只是其動態生成的代理對象并非某接口的實現,而是針對目標類擴展的子類。換句話說,Dynamic Proxy返回的動態代理類,是目標類所實現的接口的另一個實版本,它實現了對目標類的代理(如同UserDAOProxy與UserDAOImp的關系)。而CGLib返回的動態代理類,則是目標代理類的一個子類(代理類擴展了UserDAOImp類)。

2. AOP

   各種通知類型有MethodInterceptor (來自AOP聯盟的攔截器API)和定義在org.springframework.aop包中的 通知接口。所有通知必須實現org.aopalliance.aop.Advice標簽接口。 取出就可使用的通知有 MethodInterceptor、 ThrowsAdviceBeforeAdviceAfterReturningAdvice。

    也可以自己寫個攔截器,在實現自己的方法之前出發某個動作,執行一些處理。

3. WebApplicationContext

1)  web.xml 中通過聲明監聽器接口 或servlet類加載
通過: 
   <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener-->
或:
   <servlet>
      <servlet-name>SpringContextServlet</servlet-name>
      <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
Web 容器會自動加載 /WEB-INF/applicationContext.xml 初始化 ApplicationContex t實例;
也可以通過
   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext-*.xml</param-value>
   </context-param>
使 Web 容器加載指定名稱路徑的 Spring 配置文件。

我個人認為Listerner要比Servlet更好一些,因為Listerner監聽應用的啟動和結束,而Servlet得啟動要稍微延遲一些,假如在這時要做一些業務的操作,啟動的前后順序是有影響的。

那么在ContextLoaderListener和ContextLoaderServlet中到底做了什么呢?
以ContextLoaderListener為例,我們可以看到
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
protected ContextLoader createContextLoader() {
return new ContextLoader();
}
        ContextLoader是一個工具類,用來初始化WebApplicationContext,其主要方法就是initWebApplicationContext,我們繼續追蹤initWebApplicationContext這個方法(具體代碼我不貼出,大家可以看Spring中的源碼),我們發現,原來ContextLoader是把WebApplicationContext(XmlWebApplicationContext是默認實現類)放在了ServletContext中,ServletContext也是一個“容器”,也是一個類似Map的結構,而WebApplicationContext在ServletContext中的KEY就是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,我們假如要使用WebApplicationContext則需要從ServletContext取出,Spring提供了一WebApplicationContextUtils類,可以方便的取出WebApplicationContext,只要把ServletContext傳入就可以了。

2) struts-config.xml 中通過插件加載
通過
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation"
            value="/WEB-INF/applicationContext.xml,
                   /WEB-INF/action-servlet.xml"/>
    </plug-in>
來加載 Spring 配置文件。

在struts-config.xml中Action的配置變成類似下面的樣子
<action attribute="aForm" name="aForm" path="/aAction" scope="request" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="forward" path="forward.jsp" />
</action>

別急,我們還是來看一下ContextLoaderPlugIn的源碼(源碼不再貼出),我們可以發現,原來ContextLoaderPlugIn仍然是把WebApplicationContext放在ServletContext中,只是這個KEY不太一樣了,這個KEY值為ContextLoaderPlugIn.SERVLET_CONTEXT_PREFIX+ModuleConfig.getPrefix()(具體請查看源代碼),這下好了,我們知道了WebApplicationContext放在哪里,只要我們在Web應用中能夠取到ServletContext也就能取到WebApplicationContext了

4.Struts+spring+hibernate

spring live中myusers,一個3層架構的web 程序,通過一個Action 來調用業務代理,再通過它往返調 DAO類。下面的流程圖表示了MyUsers是如何工作的。數字表明了流程的先后順序,從web層(UserAction)到中間層(UserManager),再到數據層(UserDAO),然后返回。

Spring是AOP, UserManager和UserDAO都是接口.

1)    web層(UserAction) :調用中間層的接口方法,將UserManager作為屬性注入

2)     中間層(UserManager):將UserDAO作為屬性注入,其實現主要是調用數據層接口的一些方法; 它處于事務控制中

3)     數據層(UserDAO):實現類繼續HibernateDaoSupport類,在該類中可以調用getHibernateTemplate()的一些方法執行具體的數據操作。

spring配置部分文件:

 

<bean id="userDAO" class="com.eking.entity.UserDAOImp">

            <property name="sessionFactory">

                <ref local="sessionFactory" />

            </property>

        </bean>

      

       <bean id="userManagerTarget" class="com.eking.service.UserManagerImp">

             <property name="userDAO"><ref local="userDAO"/></property>

       </bean>

   

       <bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

            <property name="transactionManager">

                 <ref local="transactionManager" />

            </property>

            <property name="target">

                 <ref local="userManagerTarget" />

            </property>

            <property name="transactionAttributes">

                 <props>

                      <prop key="insert*">PROPAGATION_REQUIRED</prop>

                      <prop key="get*">PROPAGATION_REQUIRED</prop>

                      <prop key="is*">PROPAGATION_REQUIRED</prop>

                  </props>

            </property>

       </bean>

      

       <bean name="/login" class="com.eking.struts.action.LoginAction" singleton="false">

            <property name="userManager">

                 <ref local="userManager" />

           </property>

      </bean>


spring live中myusers,一個3層架構的web 程序,通過一個Action 來調用業務代理,再通過它往返調 DAO類。下面的流程圖表示了MyUsers是如何工作的。數字表明了流程的先后順序,從web層(UserAction)到中間層(UserManager),再到數據層(UserDAO),然后返回。

Spring是AOP, UserManager和UserDAO都是接口.

1)    web層(UserAction) :調用中間層的接口方法,將UserManager作為屬性注入

2)     中間層(UserManager):將UserDAO作為屬性注入,其實現主要是調用數據層接口的一些方法; 它處于事務控制中

3)     數據層(UserDAO):實現類繼續HibernateDaoSupport類,在該類中可以調用getHibernateTemplate()的一些方法執行具體的數據操作。

spring配置部分文件:

 

<bean id="userDAO" class="com.eking.entity.UserDAOImp">

            <property name="sessionFactory">

                <ref local="sessionFactory" />

            </property>

        </bean>

      

       <bean id="userManagerTarget" class="com.eking.service.UserManagerImp">

 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性无码av在线| 国语自产精品视频在线看| 日韩精品一区二区视频| 91日韩在线视频| 精品美女国产在线| 久久久久久亚洲| 成人免费网站在线观看| 日韩在线视频一区| 亚洲影院色无极综合| 亚洲国语精品自产拍在线观看| 成人午夜高潮视频| 国产精品久久久久久久久借妻| 国内精久久久久久久久久人| 精品久久久久久| 亚洲美女性视频| 精品国产31久久久久久| 日韩av电影免费观看高清| 热久久这里只有| 中文字幕一区日韩电影| www.欧美三级电影.com| 亚洲香蕉成人av网站在线观看| 欧美国产日韩一区二区在线观看| 久久精品国产亚洲一区二区| 亚洲资源在线看| 亚洲国产精品99| 国内精品久久久久久中文字幕| 欧美精品制服第一页| 97超级碰在线看视频免费在线看| 国产精品高清在线| 国产午夜精品免费一区二区三区| 97av在线视频免费播放| 亚洲mm色国产网站| 7777精品视频| 久久国产加勒比精品无码| 97色在线视频| 欧美午夜视频在线观看| 成人福利网站在线观看| 91日韩在线视频| 国产91露脸中文字幕在线| 欧美激情一级精品国产| 福利二区91精品bt7086| 成人欧美一区二区三区黑人| 一个人看的www欧美| 狠狠躁夜夜躁人人躁婷婷91| 一区二区在线免费视频| 亚洲欧美激情视频| 精品国产一区二区三区久久久狼| 国产精品美女免费看| 久久久精品网站| 久久久国产精品视频| 精品久久久一区二区| 日本国产精品视频| 国产精品亚洲аv天堂网| 777午夜精品福利在线观看| 亚洲精品有码在线| 亚洲性69xxxbbb| 亚洲综合中文字幕68页| 在线观看日韩av| 91九色国产社区在线观看| 日韩电影大片中文字幕| 日韩在线观看免费| 色www亚洲国产张柏芝| 日韩高清人体午夜| 日韩av日韩在线观看| 久久久久久久久久久成人| 亚洲精品电影网在线观看| 国产ts人妖一区二区三区| 国产精品video| 国产一区红桃视频| 国产福利精品av综合导导航| 视频一区视频二区国产精品| 成人在线一区二区| 5252色成人免费视频| 国产精品白丝jk喷水视频一区| 日韩激情第一页| 国产视频精品免费播放| 欧美国产日韩一区二区在线观看| 亚洲男人的天堂在线播放| 久久视频中文字幕| 色99之美女主播在线视频| 色中色综合影院手机版在线观看| 亚洲欧美在线第一页| 日韩av资源在线播放| 国产精品对白刺激| 成人国产亚洲精品a区天堂华泰| www.99久久热国产日韩欧美.com| 久久久久久伊人| 色七七影院综合| 欧美乱大交xxxxx另类电影| 亚洲第一中文字幕在线观看| 欧美日韩一区二区精品| 精品福利在线观看| 91福利视频在线观看| 高清在线视频日韩欧美| 欧美性猛交xxxx偷拍洗澡| 亚洲精品国精品久久99热一| 日韩资源在线观看| 久久五月情影视| 精品丝袜一区二区三区| 欧美麻豆久久久久久中文| 黑人巨大精品欧美一区二区免费| 欧美大片大片在线播放| 久久久久久久久久久久久久久久久久av| 精品一区二区三区三区| 国产精品久久不能| 国产91在线高潮白浆在线观看| 97视频在线播放| 欧美一级淫片丝袜脚交| 精品久久国产精品| 97香蕉超级碰碰久久免费的优势| 欧洲精品在线视频| 精品久久久中文| 黄色精品在线看| 青青草99啪国产免费| 欧美精品久久久久久久久久| 国产成人精品电影| 欧美成人精品在线播放| 98午夜经典影视| 中文字幕日韩高清| 另类少妇人与禽zozz0性伦| 国产中文欧美精品| 91高清免费在线观看| 亚洲va男人天堂| 久久久av免费| 国产裸体写真av一区二区| 亚洲欧美日韩天堂| 欧美日韩亚洲精品内裤| 色播久久人人爽人人爽人人片视av| 精品视频中文字幕| 国产精品揄拍一区二区| 尤物九九久久国产精品的分类| 秋霞午夜一区二区| 精品精品国产国产自在线| 成人免费看黄网站| 国产精品天天狠天天看| 成人激情综合网| 亚洲精品在线不卡| 国产一区二区三区免费视频| 亚洲国产精品小视频| 欧美福利在线观看| 亚洲91av视频| 亚洲一区二区中文字幕| 欧美久久精品一级黑人c片| 日韩视频永久免费观看| 欧美人交a欧美精品| 欧美激情一区二区三区成人| 亚洲国产美女久久久久| 成人综合网网址| 亚洲综合在线做性| 国产精品爽爽爽爽爽爽在线观看| 日本一本a高清免费不卡| 美女精品久久久| 亚洲美腿欧美激情另类| 欧美xxxx做受欧美.88| 国产精品视频公开费视频| 这里只有精品久久| 精品久久久久久久久中文字幕| 国产免费一区二区三区香蕉精| 久久6精品影院| 久久人人爽人人爽人人片av高清| 久久91亚洲精品中文字幕| 亚洲国产精品字幕| 亚洲白拍色综合图区| 日韩亚洲一区二区|