一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring學(xué)習(xí)筆記1

 Gtwo 2015-05-06

 

1.java開發(fā)領(lǐng)域,Spring相對于EJB來說是一種輕量級的,非侵入性的Java開發(fā)框架,曾經(jīng)有兩本很暢銷的書《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EEdevelopment without EJB》是java高手進(jìn)階必看的寶典,Spring就是從這兩本書的理論發(fā)展起來的。

Spring主要核心是:

(1).控制反轉(zhuǎn)(IOC):以前傳統(tǒng)的java開發(fā)模式中,當(dāng)需要一個對象時我們,我們會自己使用new或者getInstance等直接或者間接調(diào)用構(gòu)造方法創(chuàng)建一個對象,而在Spring開發(fā)模式中,Spring容器使用了工廠模式為我們創(chuàng)建了所需要的對象,我們使用時不需要自己去創(chuàng)建,直接調(diào)用Spring為我們提供的對象即可,這就是控制反轉(zhuǎn)的思想。實例化一個java對象有三種方式:使用類構(gòu)造器,使用靜態(tài)工廠方法,使用實例工廠方法,當(dāng)使用spring時我們就不需要關(guān)心通過何種方式實例化一個對象,spring通過控制反轉(zhuǎn)機(jī)制自動為我們實例化一個對象。

(2).依賴注入(DI)Spring使用java Bean對象的Set方法或者帶參數(shù)的構(gòu)造方法為我們在創(chuàng)建所需對象時將其屬性自動設(shè)置所需要的值的過程就是依賴注入的基本思想。

(3).面向切面編程(AOP):在面向?qū)ο缶幊?span lang="EN-US">(OOP)思想中,我們將事物縱向抽象成一個個的對象。而在面向切面編程中,我們將一個個對象某些類似的方面橫向抽象成一個切面,對這個切面進(jìn)行一些如權(quán)限驗證,事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想。

2.Spring中,所有管理的對象都是JavaBean對象,而BeanFactoryApplicationContext就是spring框架的兩個IOC容器,現(xiàn)在一般使用ApplicationnContext,其不但包含了BeanFactory的作用,同時還進(jìn)行更多的擴(kuò)展。

實例化Spring IOC容器的簡單方法:

(1).方法1

  1. //如果只有一個spring配置文件也可以直接傳遞一個string參數(shù),不需要使用數(shù)組  
  2. ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{“spring配置文件路徑”});  
 

(2).方法2

  1. Resource res = new FileSystemResource(“spring配置文件”);  
  2. BeanFactory factory = new XMLBeanFactory(res);  
 

2. Spring多個配置文件組合方法:

很多時候,由于Spring需要管理和配置的東西比較多,如果都放在一個配置文件中,配置文件會變的比較大,同時不方便與維護(hù),一般好的做法是按照功能模塊將Spring配置文件分開,例如:DAO層配置到一個spring-dao.xml配置文件中,Service層配置到spring-service.xml文件中,Strutsaction配置到spring-action.xml文件中,然后通過下面兩種辦法將這些分散的配置文件組合起來:

(1).方法1:在一個作為Spring總配置文件中的<bean>元素定義之前,通過<import>元素將要引入的spring其他配置文件引入,例如:

  1. <beans>  
  2.        <import resource=”spring-dao.xml”/>  
  3.        <import resource=”spring-service.xml”/>  
  4.        <import resource=”spring-action.xml”/>  
  5.        ……  
  6.        <bean>  
  7.        </bean>  
  8.        ……  
  9. </beans>  
 

(2).方法2

a.對于JavaSE的工程,當(dāng)使用下面方法獲取ApplicationContext對象時將所有的spring配置文件通過數(shù)組傳遞進(jìn)去,也可以使用通配符如spring-*.xml方式。

  1. ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{“spring配置文件路徑”});  
 

b.對于JavaEE工程,在web.xml文件中指定spring配置文件時可以指定多個,中間有逗號“,”分隔,也可以使用通配符方式。

3. spring配置文件bean的配置規(guī)則:

(1).一個Bean可以通過一個id屬性惟一指定和引用,如果spring配置文件中有兩個以上相同的id時,spring會報錯id沖突。

(2).一個Bean也可以通過一個name屬性來引用和指定,如果spring配置文件中有兩個以上相同nameBean,則spring通過name引用時,運(yùn)行時后面的會自動覆蓋前面相同namebean引用,而不會報錯。

4.spring依賴注入3種方式:

對于spring配置一個bean時,如果需要給該bean提供一些初始化參數(shù),則需要通過依賴注入方式,所謂的依賴注入就是通過springbean所需要的一些參數(shù)傳遞到bean實例對象的過程,spring的依賴注入有3種方式:

(1).使用構(gòu)造器注入:

  1. <bean id=”……” class=”……”>  
  2.        <constructor-arg>構(gòu)造函數(shù)需要的參數(shù)1</constructor-arg>  
  3.        <constructor-arg>構(gòu)造函數(shù)需要的參數(shù)2</constructor-arg>  
  4.        ……  
  5. </bean>  
 

使用構(gòu)造器注入方式時:spring在實例化該Bean時會調(diào)用配置參數(shù)符合的構(gòu)造方法。

(2).使用屬性的setter注入:

  1. <bean id=”……” class=”……”>  
  2.        <property name=”屬性1” value=”……”/>  
  3.        <property name=”屬性2” value=”……”/>  
  4.        ……  
  5. </bean>  
 

使用屬性的setter注入方式時,所注入的屬性必須提供settergetter方法,spring在實例化時會自動調(diào)用無參數(shù)的構(gòu)造方法或者靜態(tài)工廠方法,實例化之后自動調(diào)用屬性的set方法將值設(shè)置進(jìn)去。

(3).使用Field字段注入方式,該方式是spring2.5以后提供的基于java 注解(annotation)方式的注入,就是在java中的字段上或者setter方法上通過使用注解方式進(jìn)行spring的依賴注入。

例如:

a.字段注入:

  1. @Resource  
  2. private  UserDao dao;  
 

b. 屬性注入:

  1. @Resource  
  2. public void setUserDao(UserDao dao){  
  3.        this.dao = dao;  
  4. }  
 

5.spring通過注入方式注入依賴bean的方法:

Spring中為一個bean注入其依賴的另一個bean時,通過使用ref來注入另一個bean,簡單例子如下:

如果bean2中通過bean1屬性引用了bean1則通過下面方式注入:

  1. <beans>  
  2.        <bean id=”bean1” class=”……”>  
  3.               <property name=”屬性1” value=”……”/>  
  4.               ……  
  5.        </bean>  
  6. <bean id=”bean2” class=”……”>  
  7.               <property name=”bean1” ref=”bean1”/>  
  8.               ……  
  9.        </bean>  
  10. </beans>  
 

6.spring的集合注入:

當(dāng)需要給Bean的集合引用注入值時,spring也提供了相應(yīng)的方法:

(1).Set集合注入:

  1. <bean id=”……” class=”……”>  
  2. <set>  
  3.               <value>value1</value>  
  4.               <value>value2</value>  
  5.               ……  
  6.        </set>  
  7. </bean>  
 

(2).List集合注入:

  1. <bean id=”……” class=”……”>  
  2. <list>  
  3.               <value>value1</value>  
  4.               <value>value2</value>  
  5.               ……  
  6.        </list>  
  7. </bean>  
 

(3).Map集合注入:

  1. <bean id=”……” class=”……”>  
  2. <map>  
  3.               <entry key=”key1” value=”value1”>  
  4.               <entry key=”key2” value=”value2”>  
  5.               ……  
  6.        </map>  
  7. </bean>  
 

(4).Properties注入:

  1. <bean id=”……” class=”……”>  
  2. <props>  
  3.               <prop key=”key1”>value1</prop>  
  4.               <prop key=”key2”>value2</prop>  
  5.               ……  
  6.        </props>  
  7. </bean>  
 

注意:Spring會自動將其數(shù)據(jù)類型轉(zhuǎn)換,支持泛型。
8. Java
注解(Annotation)簡單介紹:

Java注解(Annotation)是通過在java源文件上添加標(biāo)記字段,然后通過反射的反射在編譯或者運(yùn)行時獲取這些標(biāo)記字段以及其標(biāo)記目標(biāo),然后進(jìn)行相應(yīng)處理的方法,曾經(jīng)風(fēng)靡一時的XDoclet就是最早的java注解的工作原理說明。使用注解可以進(jìn)行某些配置,大大減少xml配置文件的書寫麻煩,但是也有人認(rèn)為注解方式不方便理解和維護(hù),因此對于注解VS XML配置文件一直爭論不斷,個人感覺沒有好壞之分,合適就是最好的。

(1).JDK內(nèi)置注解:

JDK內(nèi)置了3個注解:

a.      @Override:聲明某個方法被重寫。

b.      @Deprectated:聲明某個方法過時,不推薦使用。

c.      @SuppressWarning({“unchecked”,…….}):告訴編譯器對于那些警告信息忽略。

(2).自定義java注解:

Java注解就是一種特殊的接口,自定java注解非常方便,簡單例子如下:

  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @Target(ElementType.CLASS)  
  3. public @interface TestAnnotation{  
  4. String value() default “”;  
  5. }  
 

(3).若要想自定義的注解可以被繼承,則需要在自定義注解類上加上“@Inherited”注解。

注意和說明:

a. java的注解實際上是自動繼承了java.lang.annotation.Annotation接口,因此在自定義注解時不能繼承其他的注解或者接口。

b. Retention:告訴編譯器如何處理注解,即注解運(yùn)行在什么時刻。

RetentionPolicy是個枚舉類型,有以下三種狀態(tài)值:

1).SOURCE:該注解存儲在源文件中,編譯過后即廢棄。

2).CLASS:該注解存儲在class文件中,是其缺省的值。

3).RUNTIME:該注解存儲在class文件中,并且有Java虛擬機(jī)讀入解析,該類型非常重要,可以使用反射機(jī)制獲取注解相關(guān)信息,可以進(jìn)行程序分析處理。

c. @Target:指定注解的目標(biāo)使用對象。

ElementType也是個枚舉類型,有以下幾種狀態(tài)值:

1).TYPE:該注解適用于class,interface,enum等類級別的目標(biāo)對象。

2).FIELD:該注解適用于類中字段級別的目標(biāo)對象。

3).METHOD:該注解適用于類中方法級別的目標(biāo)對象。

4).PARAMETER:該注解適用于方法參數(shù)級別的目標(biāo)對象。

5).CONSTRUCTOR:該注解適用于類構(gòu)造方法。

6).LOCAL_VARIABLE:該注解適用于局部變量。

7).ANNOTATION_TYPE:該注解適用于annotation對象。

8).PACKAGE:該注解適用于package對象。

d.注解里面只能聲明屬性,不能聲明方法,聲明屬性的方式比較特殊:

語法格式為:數(shù)據(jù)類型 屬性() default 默認(rèn)值(默認(rèn)值是可選的); 如:Stringvalue();

使用時,“注解對象(屬性=屬性值)”為注解指定屬性值,通過“注解對象.屬性;”就可以得到注解屬性的值。

e.注解的解析:使用java反射機(jī)制獲得注解的目標(biāo)對象就可以得到注解對象,如:

通過反射得到了注解目標(biāo)的Field對象field,則通過“field.getAnnotation(注解類.class);”就可以得到注解對象。

9.      基于注解的Spring配置準(zhǔn)備條件:

Spring2.5以后,Spring開始全面支持注解方式配置,所以可以不用寫xml配置文件,一樣可以使用spring

(1).使用spring注解方式,必須加入spring注解方式所依賴的jar包:common-annotation.jar。

(2).使用注解方式時,必須在spring配置文件的schema中添加注解的命名空間如下:

  1. xmlns:context=”http://www./schema/context”  
  2. http://www./schema/context  
  3. http://www./schema/context/spring-context-2.5.xsd  
 

(3).spring配置文件中注冊注解處理器:

spring配置文件中<.bean>元素之前添加:

  1. <context:annotation-config>  
 

10.  基于注解的spring配置:

Spring2.5中使用四個注解按功能來進(jìn)行對bean的配置:

(1).@Component:泛指組件,對于一般不好歸類的java Bean使用。

(2).@Service:用于標(biāo)注配置業(yè)務(wù)層(service)組件。

(3).@Controller:用于標(biāo)注配置控制層的組件(Struts中的action)。

(4).@Repository:用于標(biāo)注配置數(shù)據(jù)訪問層組件,即一般的DAOBean對象。

注意:對于使用spring注解方式配置的bean對象,bean引用時默認(rèn)名稱為被注解名稱的首字母小寫形式,也可以指定名稱,如:@Service(“userDao“)。

11.   Spring的自動裝配:

自動裝配的是指不用手動顯式配置java Bean之間依賴關(guān)系,而是讓spring依據(jù)某種規(guī)則自動將合適的對象注入到目標(biāo)對象的過程。Spring中常用@Autowire@Resource來進(jìn)行自動裝配。

(1).@Autowire:默認(rèn)是按照對象的數(shù)據(jù)類型進(jìn)行自動裝配的,如

  1. @Autowire  
  2. private UserDao userDao;  
 

spring框架在運(yùn)行時會自動將類型為UserDao的對象注入進(jìn)來。

(2).@Resource:默認(rèn)是按照名稱或者Id進(jìn)行自動裝配的,只有當(dāng)找不到匹配的名稱或者Id時才按類型進(jìn)行裝配,如:

  1. @Resource(name=”userDao”)  
  2. private UsreDao userDao;  
 

spring框架在運(yùn)行時會將配置名稱或者id為“userDao”的對象注入進(jìn)來。

注意:@Autowire@Resource都既可以寫在字段上,也可以寫在set方法上。

12.   Spring的自動掃描:

Spring自動掃描機(jī)制是指,我們使用基于注解的spring配置方式后,spring的配置文件中只需要注冊注解處理器,不用顯式地配置Bean,當(dāng)spring在運(yùn)行時會自動掃描根據(jù)給定的條件下類路徑中的所有bean,根據(jù)注解將它們注入和裝配起來并進(jìn)行初始化的過程。

自動掃描很簡單,只需要在spring的配置文件中添加如:

  1. <context:component-scan base-package=“要自動掃描的包名“>  
 

Spring在運(yùn)行時就可以對指定的包中所有添加了Spring注解的bean自動掃描,注入,裝配和初始化。

注意:基于注解的spring配置,自動裝配和自動掃描是緊密聯(lián)系在一起協(xié)同工作的,都需要引入context的命名空間。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    麻豆一区二区三区精品视频| 午夜精品成年人免费视频| 日本中文在线不卡视频| 亚洲女同一区二区另类| 激情丁香激情五月婷婷| 扒开腿狂躁女人爽出白浆av | 国内午夜精品视频在线观看| 欧美黑人在线一区二区| 九九热精彩视频在线播放| 日韩人妻欧美一区二区久久| 久久国产精品熟女一区二区三区| 欧洲偷拍视频中文字幕| 国产精品夜色一区二区三区不卡| 欧美成人免费一级特黄| av一区二区三区天堂| 国产精品美女午夜视频| 人人爽夜夜爽夜夜爽精品视频| 国产视频在线一区二区| 免费国产成人性生活生活片| 精品女同一区二区三区| 欧美人妻少妇精品久久性色| 午夜久久精品福利视频| 精品人妻精品一区二区三区| 中文字日产幕码三区国产| 在线免费看国产精品黄片| 欧美日韩国产精品第五页| 色婷婷视频在线精品免费观看| 精品日韩av一区二区三区| 青草草在线视频免费视频| 麻豆精品视频一二三区| 亚洲女同一区二区另类| 午夜精品一区二区三区国产| 91麻豆精品欧美视频| 欧美日韩一区二区三区色拉拉| 色哟哟在线免费一区二区三区| 午夜午夜精品一区二区| 国产又大又黄又粗的黄色| 噜噜中文字幕一区二区| 99久久婷婷国产亚洲综合精品| 日韩高清中文字幕亚洲| 亚洲最新av在线观看|