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的方式更加简便。
发布了9 篇原创文章 · 获赞 3 · 访问量 442

猜你喜欢

转载自blog.csdn.net/qq_41740808/article/details/103454336