前言
@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>