美文网首页SSMSpring-BootSpringBoot之路
001Spring注解@Configuration和@Bean

001Spring注解@Configuration和@Bean

作者: 编程界的小学生 | 来源:发表于2018-07-02 09:57 被阅读24次

    @Configuration和@Bean

    1、简介

    我们要想给Spring注入自己的bean,我们可能需要写配置文件,然后指定bean标签,还可能利用property给属性赋值等操作。总之离不开配置文件。

    2、项目结构

    image.png

    3、配置文件的方式

    3.1、实体类

    package com.chentongwei.spring.annotation.configuration.entity;
    
    /**
     * @Description:
     * @author TongWei.Chen 2018-06-29 14:27:43
     * @Project spring-annotation
     */
    public class User {
    
        private String name;
    
        private Integer 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;
        }
    
        public User() {
        }
    
        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    

    3.2、配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <beans>
            <bean id="user" class="com.chentongwei.spring.annotation.configuration.entity.User">
                <property name="age" value="12" />
                <property name="name" value="张三" />
            </bean>
        </beans>
    
    </beans>
    

    3.3、测试类

    package com.chentongwei.spring.annotation.configuration;
    
    import com.chentongwei.spring.annotation.configuration.entity.User;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @author TongWei.Chen 2018-06-29 14:29:59
     * @Description:
     * @Project spring-annotation
     */
    public class MainXmlTest {
    
        private static final String CONFIG = "classpath:configuration/beans.xml";
    
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(CONFIG);
            User user = applicationContext.getBean("user", User.class);
            System.out.println(user);
        }
    
    }
    

    3.4、输出结果

    User{name='张三', age=12}
    

    PS:

    不做过多解释,因为这是我们大家最为熟悉的一种方式,xml配置文件的方式。

    4、注解的方式

    4.1、简介

    我们完全可以利用@Configuration@Bean这两个注解来搞定上面的配置文件。

    4.2、实体类

    同上述配置文件的【User】

    4.3、主配置类

    package com.chentongwei.spring.annotation.configuration.config;
    
    import com.chentongwei.spring.annotation.configuration.entity.User;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @Description: 配置类(@Configuration),等同于spring配置文件
     *
     * @author TongWei.Chen 2018-06-29 14:33:15
     * @Project spring-annotation
     */
    @Configuration
    public class MainConfig {
    
        /**
         * @Bean: 给容器中注册一个bean,bean的类型为返回值类型,id默认为方法名
         * 类似于配置文件的
         * <bean id="user" class="com.chentongwei.spring.annotation.configuration.entity.User" />
         *
         * @return
         */
        @Bean
        public User user() {
            return new User("李四", 20);
        }
    
    }
    

    PS:

    1、@Configuration:告诉Spring,被@Configuration注解修饰的类都是配置类,等同于你写一份spring的配置文件。

    2、@Bean:告诉Spring我这是一个等待被注册的bean,相当于配置文件的<bean></bean>标签。

    ​ 2.1、bean的类型就是方法的返回值类型。

    ​ 2.2、bean的id默认就是方法名。

    ​ 2.3、可以通过@Bean()的value属性指定bean的id,比如@Bean(“user01”)

    3、@Bean只能在被@Configuration所修饰的类中才会生效。就好比你只有在spring配置文件里写<bean>标签才会管用,在普通的xml文件里写不管用。

    4.4、测试类

    package com.chentongwei.spring.annotation.configuration;
    
    import com.chentongwei.spring.annotation.configuration.config.MainConfig;
    import com.chentongwei.spring.annotation.configuration.entity.User;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    /**
     * @author TongWei.Chen 2018-06-29 14:36:50
     * @Description:
     * @Project spring-annotation
     */
    public class MainAnonationTest {
    
        public static void main(String[] args) {
            ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
    
            User user = applicationContext.getBean("user01", User.class);
            System.out.println(user);
        }
    }
    

    PS:

    注意这里是AnnotationConfigApplicationContext而不是xml了。

    4.5、输出结果

    User{name='李四', age=20}
    

    5、广告

    img
    • 今日头条号:编程界的小学生

    相关文章

      网友评论

        本文标题:001Spring注解@Configuration和@Bean

        本文链接:https://www.haomeiwen.com/subject/dveayftx.html