具有TARGET_类代理模式的java请求_作用域bean在注入到其他组件(如@Service或@Repository)中时只能看到空参数
我有一个定义为REQUEST\u SCOPE的javabean,它具有TARGET\u类代理模式。大概是这样的:
@Configuration
public class TestObjectConfiguration {
@Bean("test-object")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public UserInfo testObject() {
TestObject object = new TestObject();
object.setParameter("value");
return object;
}
}
该值是在每个请求上设置的,从请求头中获取一些值,这就是为什么我需要测试对象bean成为请求范围的原因。为了简单起见,在本例中,我只分配了一个“value”字符串
然后我想从@Service
或@Repository
(也称为单例bean)检索它。我是这样做的:
@Service
public class MyServiceImpl implements MyService {
@Autowired
@Qualifier("test-object")
private TestObject object;
@Override
public void myMethod () {
logger.info(object.getParameter());
}
}
(假设服务中定义了记录器)
object.parameter
的值为空。检查bean时,它被实例化,我看到了其中的CGLIB参数,但其中的任何元素都是null
这个类很简单,只有私有的String
和List<String>
,以及相应的setter和getter。类似于此:
public class TestObject {
private String parameter;
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}
我已经检查了几个文档源,它们声明这种组合应该有效。实际上,我看到bean在请求过程中随机实例化(带有@Controller的类,调用singleton@Service
,调用DB@Repository
),但总是带有所有参数null
我需要的是以某种方式存储从头部收集的信息,并在请求期间使@Service
和@Repository
类能够访问这些信息
你知道我遗漏了什么吗?代理模式是否需要一些我忘记或在文档中找不到的配置
共 (0) 个答案