spring @Configuration @Bean用法
Posted QQ_851228082
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring @Configuration @Bean用法相关的知识,希望对你有一定的参考价值。
概要
@Configuration里边定义@Bean,@Configuration相当于一个xml配置文件,@Bean就是xml中的<bean/>
定义
bean依赖可以调用方法,比如这里的beanTwo()。你可能会好奇,如果beanTwo()被调用两次会不会创建两个beanTwo实例,因为spring bean的默认scope是单例;答案是不会创建多个实例的,@Configuration类实现原理是cglib,代理类继承了配置类,然后重写方法,从而实现拦截,这也是为什么配置类不能被final修饰。
@Configuration
public class AppConfig {
@Bean
public BeanOne beanOne() {
//bean依赖,直接调用本类方法beanTwo
return new BeanOne(beanTwo());
}
@Bean
public BeanTwo beanTwo() {
return new BeanTwo();
}
}
如果跨@Configuration怎么办?将依赖bean当做方法参数传递
,无论是否同一个类都可以使用这种方式,实践中这种用法更实用。
@Configuration
public class AppConfig1 {
//bean依赖,方法参数当作依赖
@Bean
public BeanOne beanOne(BeanTwo beanTwo) {
return new BeanOne(beanTwo);
}
}
@Configuration
public class AppConfig2 {
@Bean
public BeanTwo beanTwo() {
return new BeanTwo();
}
}
注意
如果@Bean方法返回的是BeanPostProcessor
,方法要用static
修饰,否则可能造成@Configuration中的@AutoWired、@Inject没被注入,因为很有可能AutoWiredBeanPostProcessor在@Configuration实例化之后执行。这是为什么呢?
这是因为static方法的BeanPostProcessor实例化时,不需要实例化@Configuration类,相当于执行ConfigurationClass.staticMethod();
而非static方法,依赖@Configuration类实例,相当于new ConfigurationClass().notStaticMethod();总
以上是关于spring @Configuration @Bean用法的主要内容,如果未能解决你的问题,请参考以下文章
No cache manager could be auto-configured, check your configuration (caching type is ‘CAFFEINE‘)
No cache manager could be auto-configured, check your configuration (caching type is ‘CAFFEINE‘)
No cache manager could be auto-configured, check your configuration (caching type is ‘CAFFEINE‘)(代码片
ImageLoader must be init with configuration before using