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的使用
         */

    }

}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM