Spring提供的线程本地支持

时间:2019-04-26 12:31:12

标签: java spring spring-boot thread-local

我正在尝试使用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.为什么上述方法互相矛盾?

0 个答案:

没有答案