Spring基礎組件----@Configuration
引言
- 本篇博文,本着簡易使用以及簡易理解的目的,不針對源碼進行分析。如果有不正確的地方,還麻煩各位多多指正以下。Bean的註冊有6種方式,本文只討論2種
1.Bean
1.1 Spring XML 創建Bean
-
在原始的操作中,我們會使用Spring XML的方式來配置。這樣的使用,會使得在之後註冊大量的bean,導致XML配置文件膨脹,不利於對象的操作。
這裏先創建一個Person類:
/** * @Author: iamasd * @Description: * @Date: Created in 18:112019/12/6 */ public class Person { private String name; private Integer age; public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
接下來是XML文件的配置:
<bean id="person" class="cn.sq.demo1.Person"> <constructor-arg index="0" value="iamasd"/> <constructor-arg index="1" value="18"/> </bean>
這樣的是通過有參構造器,在向IOC容器註冊Bean的時候,通過構造器對其屬性值進行賦值操作。或者我們可以不通過對象的構造器,將Person中的構造器註釋,直接在XML的文件中通過Bean標籤中的property標籤,對對象內的屬性賦值。
<bean id="person" class="cn.sq.demo1.Person"> <property name="name" value="iamasd"/> <property name="age" value="18"/> </bean>
寫一個測試用例
/** * @Author: iamasd * @Description: * @Date: Created in 18:512019/12/6 */ public class TestDemo1 { @Test public void run1(){ //AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml"); Person person = (Person)context.getBean("person"); System.out.println(person); } } 結果:Person{name='iamasd', age=18} 以上便是最基礎的XML配置,使對象注入到IOC容器中。但是,隨着要註冊的對象增多,會導致XML文件的臃腫,不推薦使用。
1.2 @Configuration+@Bean
-
除了第一個方法,我們還可以通過@Configuration這個註解,來表明這是一個配置類, 這個類可以使用Spring IoC容器作爲bean定義的來源。 @Bean 註解在該類的方法上,AnnotationConfigApplicationContext將配置類中標註了 @Bean的方法的返回值識別爲Spring Bean,並註冊到容器中,歸入IoC容器管理。其定義意義上上等同於Spring XML文件中的標籤。
以下是一個簡單的實例:
/** * @Author: iamasd * @Description: * @Date: Created in 18:222019/12/6 */ @Configuration public class MainConfig { //註冊一個bean,返回Person,bean的id默認讀取的方法名 @Bean public Person person(){ return new Person("iamasd",20); } }
通過@Configuration和@Bean標籤,會將該對象注入到IOC容器中。@Bean中的默認值取該方法名,即person,這相當於<bean id=“person”…>,可以通過@Bean(“xxx”)來自定義beanId值。
以下是測試用例:
/** * @Author: iamasd * @Description: * @Date: Created in 18:512019/12/6 */ public class TestDemo1 { @Test public void run1(){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); //ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml"); Person person = (Person)context.getBean("person1"); System.out.println(person); } } 結果爲:Person{name='iamasd', age=20}
2.總結
- 通過對以上兩種註冊Bean的方式做了一個簡單的描述,通過@Configuration + @Bean的方式更加簡便。