一、@Configuration介绍
Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而Spring3.0之后可以不要配置文件了,通过注解@Configuration完全搞定。
@Configuration即用来代替Spring配置文件的,它就是一个@Component组件,接收一个value值也就是bean的名字,value可以不填。
二、@Configuration使用
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。例如:
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Auther: yan
* @Date: 5/9/2018 15:16
* @Description: 初始化配置项
*/
@Configuration
public class SpringConfig {
private static final Logger logger = LoggerFactory.getLogger(SpringConfig.class);
@Bean(name = "objectMapper")
ObjectMapper getObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
//objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"));
return objectMapper;
}
}
下面是一个使用实例,创建了一个userService和accountService的实例,accountService实例引用userService实例。
@Configuration
@ComponentScan(basePackages = { "com.test.web" })
@Import(UserConfg.class)
@ImportResource(locations = {"classpath:config/spring-beans.xml"})
public class MainConfg {
@Bean(name = "userService", initMethod = "init", destroyMethod = "destroy")
@Scope("singleton")
public UserService userService() {
return new UserService();
}
@Bean
public AccountService accountService(UserService userService) {
AccountService as = new AccountService();
as.setUserService(userService);
return as;
}
}
注解说明
@Configuration:代表这个类是一个配置类。
@ComponentScan:用来扫描指定包下面的注解类。
@Import:用来导入其他的@Configuration配置类。
@ImportResource:用来导入xml配置文件,比如某些配置一定要xml配置。
@Bean:用来定义一个bean,可以指定初始、销毁方法,及bean范围等。
三、 这么做有什么好处呢?
1.使用纯java代码,不在需要xml
2.在配置中也可享受OO带来的好处
3.类型安全对重构也能提供良好的支持
4.依旧能享受到所有springIoC容器提供的功能