【发布时间】:2016-05-09 13:48:19
【问题描述】:
我正在使用“AutowireCapableBeanFactory”创建一个动态bean,如下所示
RegisterFoo.java
@Configuration
public class registerFoo {
@Autowired
ApplicationContext appcontext;
AutowireCapableBeanFactory bf;
@PostConstruct
public void registerFoo() {
bf = appContext.getAutowireCapableBeanFactory();
RootBeanDefinition def = new RootBeanDefinition(Foo.class);
((DefaultListableBeanFactory)bf).registerBean("foo", def);
}
}
RegisterBar.java
@Configuration
public class registerBar {
@Autowired
ApplicationContext appcontext;
AutowireCapableBeanFactory bf;
@PostConstruct
public void registerFoo() {
bf = appContext.getAutowireCapableBeanFactory();
RootBeanDefinition def = new RootBeanDefinition(Bar.class);
Foo foo = (Foo) appContext.getBean("foo");
ConstructorArgumentValues cav = new ConstructorArgumentValues();
cav.add(0, foo.getValue());
def.setArgumentValues(cav);
((DefaultListableBeanFactory)bf).registerBean("bar", def);
}
}
Foo.class
public class Foo {
@Cacheable
public String getValue() {
// return value
}
}
getValue() 方法每次都会执行它的主体。 Spring 没有按预期缓存该值。有什么建议吗?
【问题讨论】:
-
非常感谢这里的任何输入。
-
您的应用程序中是否还有其他地方可以使用缓存?除了动态bean?
-
@Patrick - 是的,它适用于普通 bean。即使用
@Bean注释创建的 bean。 -
您是如何启用缓存注释的?发布的配置类上没有 @EnableCaching。
-
@thirstycrow 我们的
@SpringBootApplication类中有@EnableCaching
标签: caching spring-boot guava