<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • Spring裝配Bean之如何實現(xiàn)組件掃描和自動裝配-創(chuàng)新互聯(lián)

            這篇文章給大家分享的是有關Spring裝配Bean之如何實現(xiàn)組件掃描和自動裝配的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

            創(chuàng)新互聯(lián)-專業(yè)網站定制、快速模板網站建設、高性價比平和網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式平和網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋平和地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。

            Spring從兩個角度來實現(xiàn)自動化裝配:

            • 組件掃描:Spring會自動發(fā)現(xiàn)應用上下文中所創(chuàng)建的bean。

            • 自動裝配:Spring自動滿足bean之間的依賴。

            案例:音響系統(tǒng)的組件。首先為CD創(chuàng)建CompactDisc接口及實現(xiàn)類,Spring會發(fā)現(xiàn)它并將其創(chuàng)建為一個bean。然后,會創(chuàng)建一個CDPlayer類,讓Spring發(fā)現(xiàn)它,并將CompactDisc bean注入進來。

            創(chuàng)建CompactDisc接口:

            package soundsystem;
            
            public interface CompactDisc {
             void play();
            }

            實現(xiàn)CompactDisc接口:

            package soundsystem;
            import org.springframework.stereotype.Component;
            
            @Component
            public class SgtPeppers implements CompactDisc {
            
             private String title = "Sgt. Pepper's Lonely Hearts Club Band"; 
             private String artist = "The Beatles";
             
             public void play() {
              System.out.println("Playing " + title + " by " + artist);
             }
             
            }

            在SgtPeppers類上使用了 @Component注解,這個注解表明該類會作為組件類,并告知Spring要為這個類創(chuàng)建bean,不需要顯示配置SgtPeppers bean。

            不過組件掃描默認是不開啟的。我們需要顯示配置一下Spring,從而命令Spring去尋找?guī)в?@Component注解的類,并創(chuàng)建bean。

            顯示配置Spring包括Java和XML兩種方式,通過Java啟用組件掃描:

            package soundsystem;
            import org.springframework.context.annotation.ComponentScan;
            import org.springframework.context.annotation.Configuration;
            
            @Configuration
            @ComponentScan
            public class CDPlayerConfig { 
            }

            注意,類CDPlayerConfig通過Java代碼定義了Spring的裝配規(guī)則,但是可以看出并沒有顯示地聲明任何bean,只不過它使用了 @ComponentScan注解,這個注解能夠在Spring中啟用組件掃描。

            如果沒有其他配置的話,@ComponentScan默認會掃描與配置類相同的包。因為CDPlayerConfig位于sound system包中,因此Spring默認將會掃描這個包以及這個包下的所有子包,查找所有帶有 @Component注解的類。這樣的話,SgtPeppers類就會被自動創(chuàng)建一個bean。

            通過XML啟用組件掃描

            <?xml version="1.0" encoding="UTF-8"?>
            <beans xmlns="http://www.springframework.org/schema/beans";
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
             xmlns:context="http://www.springframework.org/schema/context";
             xmlns:c="http://www.springframework.org/schema/c";
             xmlns:p="http://www.springframework.org/schema/p";
             xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">;
            
             <context:component-scan base-package="soundsystem" />
            
            </beans>

            測試組件掃描能夠發(fā)現(xiàn)CompactDisc:

            package soundsystem;
            
            import static org.junit.Assert.*;
            
            import org.junit.Rule;
            import org.junit.Test;
            import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
            import org.junit.runner.RunWith;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.test.context.ContextConfiguration;
            import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
            
            @RunWith(SpringJUnit4ClassRunner.class)
            @ContextConfiguration(classes=CDPlayerConfig.class)
            public class CDPlayerTest {
            
             @Rule
             public final StandardOutputStreamLog log = new StandardOutputStreamLog();
             
             @Autowired
             private CompactDisc cd;
             
             @Test
             public void cdShouldNotBeNull() {
              assertNotNull(cd);
             }
            
            }

            CDPlayerTest使用了Spring的SpringJUnit4ClassRunner,以便在測試開始的時候自動創(chuàng)建Spring的應用上下文。注解ContextConfiguration會告訴它需要在CDPlayerConfig類中加載配置。因為CDPlayerConfig類中包含了 @ComponentScan,因此最終的應用上下文應該包含CompactDisc bean。

             測試方法斷言cd屬性部位null。如果不為null。就意味著Spring能發(fā)現(xiàn)CompactDisc類,并自動在Spring上下文中創(chuàng)建為bean并注入到測試代碼中。

            為組件掃描的bean命名

            Spring應用上下文中所有的bean都會給定一個ID。默認bean命名為類名的第一個字母變?yōu)樾?,上面的SgtPeppers bean指定的ID為sgtPeppers。

            如果想要指定bean ID,可以將ID值傳遞給 @Component注解。如下:

            @Component("lonelyHeartsClub")
            public class SgtPeppers implements CompactDisc {
             
            }

            設置組件掃描的基礎包

            @Component注解沒有設置任何屬性的情況下,按照默認規(guī)則,Spring會以配置類所在的包作為基礎包來掃描組件。但是如果想掃描不同的包,需要做的就是@Component的value屬性中指名包的名稱:

            @Configuration
            @ComponentScan("soundsystem")
            public class CDPlayerConfig { 
            }

            如果想更加清晰的表明設置的基礎包,可以通過設置basePackages屬性:

            @Configuration
            @ComponentScan(basePackages="soundsystem")
            public class CDPlayerConfig { 
            }

            同時basePackages支持多個基礎包的設置,屬性設置為數(shù)組即可:

            @Configuration
            @ComponentScan(basePackages={"soundsystem", "voice"})
            public class CDPlayerConfig { 
            }

            另外還提供一種方法,可以指定包中所含的類或接口:

            @Configuration
            @ComponentScan(basePackegeClasses={CDPlayer.class, DVDPlayer.class})
            public class CDPlayerConfig { 
            }

            通過為bean添加注解實現(xiàn)自動裝配

            自動裝配就是讓Spring自動滿足bean依賴的一種方式,在滿足依賴的過程中,會在Spring的上下文中尋找匹配一個bean需求的其他bean。為了聲明要進行自動裝配,我們可以借助Spring的 @Autowried注解。

            比如說CDPlayer類,它在構造器上添加了 @Autowried注解,這表明當創(chuàng)建CDPlayer bean的時候,會通過這個構造器來進行實例化并且會傳入一個可設置給CompactDisc類型的bean。

            package soundsystem;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.stereotype.Component;
            
            @Component
            public class CDPlayer implements MediaPlayer {
             private CompactDisc cd;
            
             @Autowired
             public CDPlayer(CompactDisc cd) {
              this.cd = cd;
             }
            
             public void play() {
              cd.play();
             }
            
            }
            
            @Autowried注解不僅能夠用在構造器上,還能用在Setter方法上。
            @Autowired
            public void setCompactDisc(CompactDisc cd) {
              this.cd = cd;
            }

            事實上,@Autowried注解可以用在類的任何方法上去引入依賴的bean,Spring都會嘗試滿足方法參數(shù)上所聲明的依賴。

            如果沒有匹配的bean,那么在應用上下文創(chuàng)建的時候,Spring會拋出一個異常。為了避免出現(xiàn)異常,可以將 @Autowried的required屬性設置為false:

            @Autowired(required=false)
            public CDPlayer(CompactDisc cd) {
              this.cd = cd;
            }

            設置以后,會嘗試自動裝配,但是如果沒有匹配的bean,Spring默認會處于未裝配的狀態(tài)。但是把required設置為false時,需要謹慎對待,如果代碼中沒有進行null檢查的話,建議不使用,不然就會出現(xiàn)NullPointerException異常。

            驗證自動裝配

            前面我們的CDPlayerTest測試類,實現(xiàn)了自動裝配CompactDisc,現(xiàn)在我們借助CDPlayer bean播放CD,表現(xiàn)出依賴的自動裝配:

            package soundsystem;
            
            import static org.junit.Assert.*;
            
            import org.junit.Rule;
            import org.junit.Test;
            import org.junit.contrib.java.lang.system.StandardOutputStreamLog;
            import org.junit.runner.RunWith;
            import org.springframework.beans.factory.annotation.Autowired;
            import org.springframework.test.context.ContextConfiguration;
            import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
            
            @RunWith(SpringJUnit4ClassRunner.class)
            @ContextConfiguration(classes=CDPlayerConfig.class)
            public class CDPlayerTest {
            
             @Rule
             public final StandardOutputStreamLog log = new StandardOutputStreamLog();
            
             @Autowired
             private MediaPlayer player;
             
             @Autowired
             private CompactDisc cd;
             
             @Test
             public void cdShouldNotBeNull() {
              assertNotNull(cd);
             }
            
             @Test
             public void play() {
              player.play();
              assertEquals(
                "Playing Sgt. Pepper's Lonely Hearts Club Band by The Beatles\n", 
                log.getLog());
             }
            
            }

            現(xiàn)在除了注入CompactDisc,還將CDPlayer bean注入到測試代碼的player成員變量中。

            總結一下,自動裝配bean的過程:

             一、把需要被掃描的類,添加 @Component注解,使它能夠被Spring自動發(fā)現(xiàn)。
             二、通過顯示的設置Java代碼 @ComponentScan注解或XML配置,讓Spring開啟組件掃描,并將掃描的結果類創(chuàng)建bean。
             三、@Autowried注解能偶實現(xiàn)bean的自動裝配,實現(xiàn)依賴注入。

            感謝各位的閱讀!關于“Spring裝配Bean之如何實現(xiàn)組件掃描和自動裝配”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

            分享名稱:Spring裝配Bean之如何實現(xiàn)組件掃描和自動裝配-創(chuàng)新互聯(lián)
            分享路徑:http://www.jbt999.com/article42/psjec.html

            成都網站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、商城網站、動態(tài)網站、網站設計、搜索引擎優(yōu)化、手機網站建設

            廣告

            聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

            外貿網站建設

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 国产一区二区视频在线 | 日韩人妻在线免费观看 | 国产精品呻吟久久 | 在线观看国产亚洲 | 人妻巨大乳HD免费看 |