前言
@Configuration
用於定義配置類,可替換XML配置文件,被註解的類內部包含一個或多個@Bean
註解方法。可以被AnnotationConfigApplicationContext
或者AnnotationConfigWebApplicationContext
進行掃描。用於構建bean定義以及初始化Spring容器。 它是在spring3.0版本之後出現的。此註解是spring支持註解驅動開發的一個標誌。表明當前類是spring的一個配置類,作用是替代spring的applicationContext.xml。但其本質就是@Component註解,被此註解修飾的類,也會被存入spring的IOC容器。
屬性:
value:用於存入spring的ioc容器中Bean的id
使用場景:
在註解驅動開發時,用於縮寫配置的類,通常可以使用此註解。一般情況下,我們的配置也會分爲主次配置,@Configureation一般出現在主配置類上。值得注意的是,如果我們在註解驅動開發時,構建ioc容器使用的是傳入字節碼的構造函數,此註解可以省略,但是如果傳入的是一個包,此註解則不能省略。
實例
@Configuration 加載Spring方法
Car.java
public class Car { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
定義Config類
@Configuration public class Config { public Config() { System.out.println("TestConfig容器初始化..."); } @Bean(name = "getMyCar") public Car getCar() { Car c = new Car(); c.setName("dankun"); return c; } }
實例化
public void testConfig() { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); Car car = (Car)context.getBean("car"); System.out.println(car.getName()); } // 輸出 // TestConfig容器初始化... // dankun
@Configuration + @Component
@Configuration
也附帶了@Component的功能。所以理論上也可以使用@Autowared
功能。上述代碼可以改成下面形式
Car.java
@Component public class Car { @Value("dankun") private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Config.java
@Configuration @ComponentScan("com.wuyue.annotation") public class Config { public Config() { System.out.println("TestConfig容器初始化..."); } }
測試主入口
public class TestConfig { @Test public void testConfig() { ApplicationContext context = new AnnotationConfigApplicationContext(Config.class); Car car = (Car)context.getBean("car"); System.out.println(car.getName()); } } // 輸出 // TestConfig容器初始化... // dankun
總結
- @Configuation等價於
<Beans></Beans>
- @Bean 等價於
<Bean></Bean>
- @ComponentScan等價於
<context:component-scan base-package="com.dxz.demo"/>
- @Component 等價於
<Bean></Bean>