一、Spring注解:@Configuration & @Bean

​ 对于传统的Spring或者SpringMVC程序来说,一般都是基于XML来配置的,不过对于SpringBoot来说,推崇采用JavaConfig,也就是使用注解来开发。

​ 从Spring3.0开始,就引入了@Configuration用于定义配置类,可以替换XML配置文件。被@Configuration注解的类内部会包含有多个或者一个被@Bean注解的方法,这些方法会被AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 类进行扫描,用于构建bean,初始化IOC容器。

@Bean:容器中注册组件的第一种方式,通常用于导入第三方包中的组件
1. 基于XML配置容器

​ 在传统的程序中,若要在IOC容器中注册一个bean,就需要在XML文件中进行配置。例如要将Persoon类注册到容器中:

<?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">
    <bean id="person" class="com.baiding.model.Person">
        <property name="name" value="lisi"/>
        <property name="age" value="23"/>
    </bean>
</beans>

​ 测试一下:使用ClassPathXmlApplicationContext获得XML方式注册到容器中的Bean实例

public class MainTest {
    @Test
    void test01(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-scan.xml");
        Person person = (Person) ac.getBean("person");
        System.out.println(person); // Person{name='lisi', age=23}
    }
}
2. 基于JavaConfig配置

​ 若使用注解的方法初始化IOC容器,我们就需要用到@Configuration 和@Bean这两个注解了。使用注解方法修改上述配置:

/**
*@Configuration 通知Spring这是一个配置类
*配置类 相当于 配置文件
*/
@Configuration
public class BeanConfig {

    /**
     * 给容器中注册一个bean 类型为返回值的类型 id默认为方法名或者直接用属性name配置id
     * @return
     */
    @Bean(name = "wangwu")
    public Person person(){
        return new Person("wangwu",22);
    }
}

新建一个配置类(使用@Configuration注解注释的类),在类里面声明使用@Bean注解的方法。

测试一下:使用AnnotationConfigApplicationContext获得注解方式注册到容器中的Bean实例

public class MainTest {

    @Test
    void test02(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(BeanConfig.class);
        Person person = (Person) applicationContext.getBean("wangwu");
        System.out.println(person); // Person{name='wangwu', age=22}
        String[] names = applicationContext.getBeanNamesForType(Person.class);
        for(String name :names){
            System.out.println(name); // wangwu
        }
    }
}

将JavaConfig方式和XML配置方式做个对比,可以看出:

@Configuration标注在类上,相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器

@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的<bean>,作用为:注册bean对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值