Spring Ioc 基於Java的容器配置

1、基於Java的容器配置html

@Configuration & @Bean 註解:java

         在Spring的新的Java-Configuration的中間產物是基於類的@Configuration的註解和基於方法的@Bean註解。
         @Bean註解是用來指明方法的實例化,配置和初始化一個對象是經過Spring的IoC容器來管理的。對於那些熟悉使用以XML配置Spring的<beans /> 標籤,@Bean註解和<bean />標籤是起相同做用的。你能和Spring的@Component註解的組件一塊兒使用@Bean註解方法, 然而,這些@Bean註解的方法一般是和@Configuration的Bean。
        @Configuration註解的類指明該類主要是做爲一個bean的來源定義。此外,@Configurationd定義的classes容許在同一個類中使用@Bean定義的方法來定義依賴的bean 
註釋類與@Configuration表示這個類可使用Spring IoC容器爲bean定義的來源。在@Bean 註解告訴Spring的註解爲@Bean的一個方法將返回應註冊爲在Spring應用程序上下文中的bean對象。最簡單可行的@Configuration類將以下所示: web

上面的AppConfig類等效於如下Spring <beans/>XML:spring

 

JavaConfig是Spring的一個子項目, 它皆在經過Java類的方式提供 Bean的定義信息.  普通的POJO只要標註了 @Configuration註解, 就能夠爲 Spring 容器提供Bean定義的信息了. 每一個標註了 @Bean註解的方法都至關於提供了 Bean的定義信息.
使用 @Configuration 註解標註配置類:安全

基於Java類定義Bean配置元數據,其實就是經過Java類定義Spring配置元數據,且直接消除XML配置文件。
首先讓咱們看一下基於Java類如何定義Bean配置元數據,具體步驟以下:
  1. 使用@Configuration註解須要做爲配置的類,表示該類將定義Bean的元數據
  2. 使用@Bean註解相應的方法,該方法名默認就是Bean的名稱,該方法返回值就是Bean的對象。
  3. AnnotationConfigApplicationContext或子類進行加載基於java類的配置

一、(Manager實體這裏就不截圖了)xss

 

上面的代碼將等同於下面的XML配置:函數

<bean id="mgr" class="org.sl.netmarket.entities.Manager"/>spa

註解爲@Bean的方法名稱做爲工做bean的id,它建立並返回實際的bean。配置類能夠有聲明多個@Bean。一旦配置類定義,能夠加載和提供他們使用AnnotationConfigApplicationContext .net

Spring 提供了一個 AnnotationConfigApplicationContext 類. 它可以直接經過標註 @Configuration  的Java類啓動容器. 以下,以Spring容器:code

2.

AnnotationConfigApplicationContext 支持加載多個 @Configuration 的Java類. 而後經過刷新容器應用配置這些類. 

也能夠經過 @Import 註解,  將多個配置類組裝到一個配置類中, 只須要加載一個配置類就能夠.

 

結果:

這麼作有什麼好處呢?

     1.使用純java代碼,不在須要xml

     2.在配置中也可享受OO帶來的好處

     3.類型安全對重構也能提供良好的支持

     4.依舊能享受到全部springIoC容器提供的功能


        ApplicationContext 接口的最經常使用的實現類是 ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext,以及面向 Portlet 的 XmlPortletApplicationContext 和麪向 web 的 XmlWebApplicationContext,它們都是面向 XML 的。Spring 3.0 新增了另外兩個實現類:AnnotationConfigApplicationContext 和 AnnotationConfigWebApplicationContext。從名字即可以看出,它們是爲註解而生,直接依賴於註解做爲容器配置信息來 源的 IoC 容器初始化類。因爲 AnnotationConfigWebApplicationContext 是 AnnotationConfigApplicationContext 的 web 版本,其用法與後者相比幾乎沒有什麼差異,所以本文將以 AnnotationConfigApplicationContext 爲例進行講解。
        AnnotationConfigApplicationContext 搭配上 @Configuration 和 @Bean 註解,自此,XML 配置方式再也不是 Spring IoC 容器的惟一配置方式。二者在必定範圍內存在着競爭的關係,可是它們在大多數狀況下仍是相互協做的關係,二者的結合使得 Spring IoC 容器的配置更簡單,更強大。以前,咱們將配置信息集中寫在 XML 中,現在使用註解,配置信息的載體由 XML 文件轉移到了 Java 類中。咱們一般將用於存放配置信息的類的類名以 「Config」 結尾,好比 AppDaoConfig.java、AppServiceConfig.java 等等。咱們須要在用於指定配置信息的類上加上 @Configuration 註解,以明確指出該類是 Bean 配置的信息源。

注意:Spring 對標註 Configuration 的類有以下要求
配置類不能是 final 的;配置類不能是本地化的,亦即不能將配置類定義在其餘類的方法內部;配置類必須有一個無參構造函數。AnnotationConfigApplicationContext 將配置類中標註了 @Bean 的方法的返回值識別爲 Spring Bean,並註冊到容器中,受 IoC 容器管理。@Bean 的做用等價於 XML 配置中的 標籤。

@Bean 具備如下四個屬性: 
name -- 指定一個或者多個 Bean 的名字。這等價於 XML 配置中 的 name 屬性。

initMethod -- 容器在初始化完 Bean 以後,會調用該屬性指定的方法。這等價於 XML 配置中 的 init-method 屬性。

destroyMethod -- 該屬性與 initMethod 功能類似,在容器銷燬 Bean 以前,會調用該屬性指定的方法。這等價於 XML 配置中 的 destroy-method 屬性。

autowire -- 指定 Bean 屬性的自動裝配策略,取值是 Autowire 類型的三個靜態屬性。Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。與 XML 配置中的 autowire 屬性的取值相比,這裏少了 constructor,這是由於 constructor 在這裏已經沒有意義了。@Bean 沒有直接提供指定做用域的屬性,能夠經過 @Scope 來實現該功能。

 

因爲@configureation註解類自己已經標註了@component註解,因此任何標註了@configuration的類,自己也至關於標註了@component,即它們能夠像普通的bean同樣被注入到其它bean中去。

2、基於配置文件及Java類

一、先建立一個實體類

@component (把普通pojo實例化到spring容器中,至關於配置文件中的 
<bean id="" class=""/>)

泛指各類組件,就是說當咱們的類不屬於各類歸類的時候(不屬於@Controller、@Services等的時候),咱們就可使用@Component來標註這個類。

https://www.cnblogs.com/xss512/p/10905006.html

二、配置xml文件

掃描須要的包,是掃描註解了@Component的實體類

三、

結果:

這就得到了manager的實例了

相關文章
相關標籤/搜索