使用@Configuration注解来代替Spring的bean配置

一、@Configuration介绍

Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而Spring3.0之后可以不要配置文件了,通过注解@Configuration完全搞定。
使用@Configuration注解来代替Spring的bean配置_第1张图片

@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容器提供的功能

你可能感兴趣的:(Spring)