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