Spring學習之路-裝配Bean

1Spring容器

(1)容器的定義:生產實例的工廠,管理容器中的bean.
(2)bean的定義:bean是Spring管理的基本對象,所有的組件都能都當成bean進行管理。Spring容器負責管理bean的生命週期,創建bean、裝配bean、銷燬bean。
(3)spring核心接口:BeanFactory和ApplicationContext。BeanFactory:負責配置、創建、管理Bean。ApplicationContext是BeanFactory的一個接口,因此稱之爲上下文,spring容器負責管理Bean與Bean之間的依賴關係。
(4)DI:依賴注入,主要是通過外部的方式實現注入的。能夠實現對象之間的解耦。
(5)IOC:控制反轉,將bean注入到其他的類中時,關於bean的創建、裝配、銷燬都交給了Spring容器。

2裝配Bean

(1)注入bean的方式(DI):

  1)構造器注入。
  2)get、set方式注入(屬性注入)。
  3)接口注入。

(2)裝配Bean的方式:

  1)XML方式裝配Bean。
  2) java中顯示配置。
  3)隱式的bean發現機制和自動裝配。

(3)裝配bean

 1)組件掃描(component scanning):Spring會發現應用上下文所創建的bean。
 2)自動裝配(autowiring):Spring自動滿足bean之間的裝配。

–>在裝配Bean的時候,首先在Spring的上下文能夠通過某些標識(例如@Component)識別這個類是一個組件,繼而,關於這個組件後續的一切交給Spring容器了。Spring容器識別這個組件後,纔會將它裝配成Bean,創建成Bean,管理Bean的一切。類要做的就是讓Spring容器識別它是一個bean,讓Spring容器可以識別的註解包括:@Component 、@Repository、@ Controller、@Service 、@Configration一般和@Bean一起使用。
–>Spring要做的就是能夠發現在Spring的上下文中組件,然後管理這些組件,將這些組件裝配成Bean。Spring識別組件的註解@ComponentScan。

3例子
/**
 *聲明這個類爲組件類,並告知Spring要爲他創建bean
 *同樣聲明組件的註解還有:
 */
@Component
public class SgtPeppers {

    private String title = "play...SgtPeppers implements CompactDisc";

    public void play() {
        System.out.println(title);
    }

}

@Component註釋的類,能夠被Spring識別爲組件,Spring容器會爲這個類生成bean。
測試類

public class TestDemo extends BaseTestCase {

    @Autowired
    private SgtPeppers sgtPeppers;

    @Test
    public void test() {
        sgtPeppers.play();
    }
}

我封裝了一下測試類

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = { AppleApplication.class })
public abstract class BaseTestCase {
}

在AppleApplication中有掃描整個類的註解。
AppleApplication代碼, @SpringBootApplication中包含幾個註解,它會掃描所有以”com.demo”開始的包內的註解。

@SpringBootApplication(scanBasePackages = { "com.demo" })
public class AppleApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(getClass());
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(AppleApplication.class).bannerMode(Banner.Mode.OFF).web(true).run(args);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章