有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有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

这个类很简单,只有私有的StringList<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) 个答案