Spring3學習筆記一Spring簡介二IOC詳解三DI一注入方式六AOP面向切面編程一AOP基礎(chǔ)二基于配置Schema的AOP
Spring 是一個開源的輕量級應(yīng)用開發(fā)框架。使用Spring可以簡化開發(fā)流程,Spring可以幫我們管理對象和依賴關(guān)系,提供通用日志記錄、性能統(tǒng)計、安全控制、事務(wù)處理等。
Ioc容器AOP事務(wù)管理JDBCMVC框架and so on非侵入式設(shè)計:應(yīng)用程序不需繼承框架的類或接口即可使用框架提供的功能。方便代碼重用和框架切換。
POJO:簡單java對象,只包含業(yè)務(wù)邏輯或持久化邏輯。容器:提供運行環(huán)境,如Tomcat;管理對象生命周期和依賴關(guān)系,如Spring。AOP:AOP是aspect Oriented Programming的縮寫,意思是面向切面編程。抽取通用的代碼邏輯,在需要的時候動態(tài)織入到程序中去。Bean定義方式:
無參構(gòu)造器:
<bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/>有參構(gòu)造器:
<bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2"> <!-- 指定構(gòu)造器參數(shù) --> <constructor-arg index="0" value="Hello Spring!"/> </bean>靜態(tài)工廠方式
<!-- 使用靜態(tài)工廠方法 --> <bean id="bean3" class="cn.javass.spring.chapter2.HelloApiStaticFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"/> </bean>實例工廠方式
<!—1、定義實例工廠Bean --> <bean id="beanInstanceFactory" class="cn.javass.spring.chapter2.HelloApiInstanceFactory"/> <!—2、使用實例工廠Bean創(chuàng)建Bean --> <bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance"> <constructor-arg index="0" value="Hello Spring!"></constructor-arg> </bean>假如A類依賴B接口對象,這時B接口有多個實現(xiàn)類注冊到了IOC容器中,在注入的時候,spring會報錯:重復(fù)定義
Spring的IOC有兩層含義:Bean依賴容器和容器注入Bean的依賴資源。好處如下:
動態(tài)替換Bean依賴對象,程序更靈活;更好實踐面向接口編程,代碼更清晰;更好實踐優(yōu)先使用對象組合,而不是繼承;增加Bean可復(fù)用性;構(gòu)造器注入 可分為三種:根據(jù)參數(shù)索引注入、根據(jù)參數(shù)類型注入、根據(jù)參數(shù)名注入,其中索引注入可靠性最高,參數(shù)類型注 入中除了制定類型外,還要按照構(gòu)造函數(shù)的參數(shù)列表順序來注入。 構(gòu)造器注入是需要相應(yīng)的構(gòu)造函數(shù)的,Spring的BeanFactory會根據(jù)配置文件中配置的參數(shù)(即constructor)的個數(shù)、類型等屬性來匹配構(gòu)造器,如果構(gòu)造器匹配失敗則拋出異常
<!-- 直接用構(gòu)造器進行類屬性的注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index進行映射--><bean id="byIndex" class="com.rambo.domain.Person"> <constructor-arg index="0" value="Hello World!" /> <constructor-arg index="1" value="1" /></bean><!--使用靜態(tài)工廠類來調(diào)用構(gòu)造器進行注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index+type進行映射 --><bean id="byType" class="com.rambo.domain.PersonStaticFactory" factory-method="newInstance"> <constructor-arg type="java.lang.String" value="Hello World!" /> <constructor-arg type="int" value="2" /></bean><!--使用實例工廠類來調(diào)用構(gòu)造器進行注入 ,屬性映射使用相應(yīng)構(gòu)造器的參數(shù)列表的index+name進行映射,不建議使用 --><bean id="byName" class="com.rambo.domain.PersonFactory" factory-method="newInstance"> <constructor-arg name="message" value="Hello World!" /> <constructor-arg name="index" value="3" /></bean>setter注入 其先通過默認構(gòu)造器實例化Bean以后,再通過setter方法將屬性設(shè)值,所以該類的默認構(gòu)造器不能被覆蓋。
<!-- 通過setter方式進行依賴注入 --> <bean id="bean" class="cn.javass.spring.chapter3.HelloImpl4"> <property name="message" value="Hello World!"/> <property name="index"> <value>1</value> </property> </bean>可以看出來,value如果用簡寫的方式,指定的全是字符串,類型轉(zhuǎn)換的工作有Spring容器來處理,如果轉(zhuǎn)換出錯將拋出相應(yīng)的異常。 Spring類型轉(zhuǎn)換系統(tǒng)對于boolean類型進行了容錯處理,除了true/false外,還可以用yes/no、on/off、1/0來表示。
新聞熱點
疑難解答