我正在使用“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不会按预期缓存值。有什么建议吗?
答案 0 :(得分:1)
我认为问题是当spring注册一个带注释的bean时,它会被一个管理@Cacheable的bean后处理器进行后处理
手动注册时,后处理可能无法完成。
暂时无法验证,但这是我首先要查看的地方。
希望得到这个帮助。