對于傳統的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",);
}
}
建立一個配置類(使用@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對象