对于传统的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对象