SSMSpring-BootSpringBoot之路

001Spring注解@Configuration和@Bean

2018-07-02  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读