Spring基礎組件----@Configuration

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的方式更加簡便。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章