SpringBoot - @Configuration与@Import

@Configuration

proxyBeanMethods配置类是用来指定@Bean注解标注的方法是否使用代理,默认是true使用代理,直接从IOC容器之中取得对象;

如果设置为false,也就是不使用注解,每次调用@Bean标注的方法获取到的对象和IOC容器中的都不一样,是一个新的对象;

所以我们可以将此属性设置为false来提高性能;

@Configuration(proxyBeanMethods=true)
public class AppConfig {
  //注入容器 @Bean
public FooService fooService() {
    //注入属性
return new FooService(fooRepository()); } @Bean public FooRepository fooRepository() { return new JdbcFooRepository(); }
// ... }

@Import

1.引入普通类

@Import引入普通的类可以帮助我们把普通的类定义为Bean。
@Import可以添加在@SpringBootApplication(启动类)、@Configuration(配置类)、@Component(组件类)对应的类上。
注意:@RestController、@Service、@Repository都属于@Component
@SpringBootApplication
@Import(ImportBean.class) // 通过@Import注解把ImportBean添加到IOC容器里面去
public class MyBatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyBatisApplication.class, args);
    }

}

2.引入配置类(@Configuration修饰的类)

@Import除了可以把普通的类定义为Bean,@Import还可以引入一个@Configuration修饰的类(引入配置类),从而把让配置类生效(配置类下的所有Bean添加到IOC容器里面去)。在自定义starter的时候经常会用到。
 
如果配置类在标准的SpringBoot包结构下(SpringBootApplication启动类包的根目录下)。是不需要@Import导入配置类的,SpringBoot自动帮做了。上面的情况一般用于@Configuration配置类不在标准的SpringBoot包结构下面。所以一般在自定义starter的时候用到。
@Configuration(proxyBeanMethods = false)
@Import({  // import了两个哈
        XXXDataConfiguration.XXXPartOneConfiguration.class,
        XXXDataConfiguration.XXXPartTwoConfiguration.class
})
public class XXXDataAutoConfiguration {
}



public class XXXDataConfiguration {

    @Configuration(proxyBeanMethods = false)
    static class XXXPartOneConfiguration {

        @Bean
        @ConditionalOnMissingBean
        public BeanForIoc beanForIoc() {
            return new BeanForIoc();
        }

    }

    @Configuration(proxyBeanMethods = false)
    static class XXXPartTwoConfiguration {

        /**
         * 省略了@Bean的使用
         */

    }

}

 



posted on 2021-12-11 15:10  每天积极向上  阅读(1335)  评论(0编辑  收藏  举报

导航