我正在尝试使用ThreadLocalTargetSource通过Spring利用线程本地功能。现在,运行后,我检查了这三个bean在spring上下文中是否存在。
@Bean(destroyMethod = "destroy")
public ThreadLocalTargetSource threadLocalTenantStore() {
ThreadLocalTargetSource result = new ThreadLocalTargetSource();
System.out.println("Inside Destroy method");
result.setTargetBeanName("transactionStore");
return result;
}
@Primary
@Bean(name = "proxiedThreadLocalTargetSource")
public ProxyFactoryBean proxiedThreadLocalTargetSource(ThreadLocalTargetSource threadLocalTargetSource) {
ProxyFactoryBean result = new ProxyFactoryBean();
result.setTargetSource(threadLocalTargetSource);
return result;
}
@Bean(name = "transactionStore")
@Scope(scopeName = "prototype")
public User transactionStore() {
return new User();
}
现在context.getBeanDefinitionNames确认所有这些bean存在,现在,当我尝试获取用户类型对象时。
现在使用String提取Bean-> System.out.println(context.getBean(“ transactionStore”)); 返回用户的新对象
使用类ThreadLocalTargetSource获取Bean时。--> System.out.println(context.getBean(User.class)); 提供上下文相关的现有bean,并由threadlocalTargetSource保留。
我知道声明的原型bean必须始终是新的,但不了解getBean(Class)和getBean(String)的上述行为。
1。从上下文中的ThreadLocalTargetSource获取targetBean的正确方法是什么(使用getTarget方法?(实现每个线程的Object)) )。 2.为什么上述方法互相矛盾?