spring(一) IOC講解

        spring基本就兩個核心內容,IOC和AOP。把這兩個學會了基本上就會用了。html

                    --WZYjava

1、什麼是IOC?web

    IOC:控制反轉,通俗點講,將對象的建立權交給spring,咱們須要new對象,則由spring幫咱們建立,而後供咱們使用。spring

    編寫IOC的helloworld。簡單的三步就搞定了數組

      一、導入jar包架構

          5個包,4個核心包,1個依賴包  app

              

              

      二、編寫配置文件測試

          spring幫咱們建立對象,但也必須有相關類的信息,否則怎麼可以建立呢?spa

          配置文件名稱:建議:ApplicationContext.xml,取別的也能夠,可是取建議的名稱的話,找到該配置文件更爲簡單,prototype

          配置文件位置:任意,通常都在classpath下(src)

          文件約束內容:添加約束,spring-framework-3.2.0.RELEASE 爲spring的核心  docs爲幫助文檔

               約束位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

              

                    

                

      三、從spring容器中獲取對象

            

    

        UserService.java              

              

 

2、依賴注入(DI)

      如今應該知道了什麼是IOC,helloworld很簡單吧,但spring若是隻提供這麼一個簡單的功能,就不能被你們那麼所崇拜了,上面只是把IOC這個功能給你們簡單展現一下,讓你們腦海中有IOC是幹什麼的,能作什麼的概念,如今就對其進行增強把。

      依賴注入(DI):spring建立對象A時,會將對象A所依賴的對象B也建立出來,並自動注入到對象A中。

              依賴:(has a) 有一個的意思,好比類A中有一個類B,那麼就說A依賴B。          繼承,實現(is a)

                                  

              而咱們說的依賴注入,就是當建立A對象時,同時會將B對象給建立,並自動注入到對象A中去,也就說,我只叫spring給我A對象,可是A中可使用B對象了。這個有很大的用處,但如何去實現依賴注入功能呢?

            

            

        UserService中有使用userDao對象,這個咱們都很熟悉的使用伎倆,service層調用dao層的方法。按照往常咱們的寫法,在service中須要本身new出UserDao對象,可是在spring中就不須要了,一切對象都讓spring幫咱們建立。

        ApplicationContext.xml

            

        過程就如圖中所畫,先建立UserService對象,而後在根據property中的ref找到userDaoId並建立UserDao對象,而後根據property中的name,經過setter方法注入,這樣就完成了依賴注入。

       測試:

          

      

 

3、spring建立實例對象的三種方法

       由於並非每一個bean都是普通類,有些是經過工廠來獲取的,而工廠就有靜態工廠和實例工廠,因此spring建立實例對象有三種狀況,

       默認無參構造,就是編寫IOC的helloworld的那種方式,直接<bean id="" class="">

       靜態工廠:因爲是靜態工廠,因此經過工廠類直接調用建立實例的方法就能夠了。

            <bean id="" class="工廠全限定類名" factory-method="靜態方法">

       實例工廠:須要先建立出工廠實例,而後在由工廠建立對象

            <bean id="myFactoryId" class="工廠全限定類名"></bean>

            <bean id="" factory-bean="myFactoryId"  factory-method=""></bean>

      

4、屬性依賴注入基於XML

       以前講的那個依賴注入其實也屬於屬性依賴注入這一範疇中,在最開始咱們演示IOC(控制反轉)也就是spring幫咱們建立實例時,那只是經過無參構造方法進行建立,那麼在實際開發中,這樣建立確定是不行的,因此咱們須要在spring的配置文件中配置一些屬性信息,使spring幫咱們建立時,能夠直接將對象的一些屬性也注入進去,有兩種方法

       經過構造方法注入

              

          不論是普通屬性仍是引用數據,均可以經過構造方法進行注入。

       經過setter方法進行注入

               

           經過setter方法對普通屬性和引用屬性進行注入,那麼要是建立的對象中有集合呢?那該如何進入注入?

         集合的注入List、Map、Set、數組、Properties等。

           List

                

           set

              

            map

              

           數組

              

           propertyis

              

            注意:properties這種類型存放形式跟map差很少,以key和value進行存放的,

                  

 

      到這裏,基本上就把全部可以注入的屬性類型都講解完了,注入的類型基本上分爲三塊,普通類型,引用類型和集合。下面在講一種基於註解來注入各類,由於基於xml感受很麻煩。

 

5、屬性依賴注入基於註解

      註解格式:@xxx

      使用註解:必須對使用註解的地方進行掃描,否則註解沒用。而掃描須要作兩件事

          一、添加名稱空間,

              在咱們找配置文件中約束的位置那:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html 找到context的名稱空間。

              

                       

          二、掃描指定的目錄,

                  

 

     註解:

        一、@Component  替代  <bean id="" class=""> 能夠配置任意bean,在所在類上面添加該註解便可,

                @Component("userId") userId至關於bean中的id屬性值

                 

 

        二、  這三個就跟使用@Component是同樣的,可是爲了更好的體現三層架構,就有了這三個註解

         @Controller  修飾web層中的類。

         @Service  修飾service層的類

         @Repository  修飾dao層的類

            兩種方式,一種不聲明名稱,一種聲明名稱

            @Controller("xxx")  @Controller  

            若是聲明瞭名稱,那麼在別的地方引用的話,就可使用@Autowired或@Autowired與@Qualifier的組合 或直接使用@Resource按照名稱注入

            若是沒有聲明名稱,那麼在別的地方引用的話,只能使用@Autowired 來進行注入

       三、屬性注入

         普通屬性

            @Value    @Value("")  給普通屬性注入屬性值

          引用屬性

              @Autowired  按默認類型進行注入

              @Qualifier("") 按照名稱注入  

            若是使用了@Qualifier這個註解,那麼就須要兩個一塊兒使用才能生效。若是隻使用@Autowired,那麼寫不寫@Qualifier均可以

          引用屬性

            @Resource  直接按照名稱注入,與上面兩個註解一塊兒使用是等效的  

                @Resource(name="xxx")

             

       四、使用

           

                       

       五、其餘註解

           @Scope("prototype")  做用域註解(spring幫咱們建立的bean實例的做用域,在下面會講解到)

           @PostConstruct  修飾初始化    

           @PreDestory  修飾銷燬      

                最後兩個用的很少,掌握前面的便可。

      

6、spring建立的bean的做用域  

      也就是spring幫咱們建立的bean的使用範圍。

      格式:<bean id="" class=""  scope="....">

      取值:

            

      掌握前兩個,singleton 和prototype

          singleton:單例,也就是當spring經過xml配置文件幫咱們建立一個bean對象時,那咱們拿到的就一直是同一個對象,僅存在一個那樣的bean實例。默認值

                

              

          prototype:每次咱們須要bean實例時,都會建立一個新的實例。

                

              

 

7、編寫applicationcontext.xml提示問題

         五步便可解決

         第一步:spring的核心jar中找到Scheme xsd文檔

              spring-framework-3.2.0.RELEASE\schema\beans\spring-beans-3.2.xsd

              

         第二步:從xml配置文件中,獲取xsd文檔位置,複製....spring-beans.xsd

              

 

         第三步:window/preferences/ 搜索 「xml catalog」

                

        第四步:

              

        第五步:

              

        

            注意:若是xml沒有提示,關閉xml重寫打開。

 

8、總結

      spring的第一個重點IOC,就這樣講完了,其實看完以後很是簡單,就是讓spring給你建立對象,你想要對象的時候,就找spring,讓他給。

      學的東西有:

          什麼是IOC,什麼是依賴注入。

          以後對依賴注入進行詳細的講解。

                使用xml方式和使用註解方式

      說簡單點,這一節就是學會了經過配置,讓spring幫咱們建立咱們想要的bean,

相關文章
相關標籤/搜索