首页 > 解决方案 > 更改 Java 中被调用方法中使用的对象的属性

问题描述

我有一个使用 maven 作为构建机制的 java、spring web 应用程序。考虑以下代码(我的情况的过度简化版本),其中控制器调用服务以执行某些操作,然后它又调用某些 DAO 方法以在 DB 中执行某些操作。

class MyController extends Controller {
    public ModelAndView handleRequest(... request) {
        boolean performCheck = Boolean.valueOf(request.getParameter("doCheck"));
        myService.doSomeAction(object)
        return ...; 
    } 
}

class MyService {
    public void doSomeAction(Object o){
        myDao.doSomething(o);
    }
}

class MyDao exterds HibernateDaoSuppot {
    boolean check;

    public void doSomething(Object o){
        if(check == true){
            // some action
        } else {
            // some other action
        }

    }
}

我的问题是如何根据我在控制器中收到的值更改 Dao 方法中检查布尔值的值,而不显式地将布尔值传递给所有层?我使用具有大量业务逻辑的遗留代码,业务团队没有信心对现有代码进行太多修改。但是,我可以自由添加任何类或方面来执行相同的操作。

我已经尝试在 DAO 方法中读取调用堆栈并确定上面几层的布尔值,但我对使用调用堆栈感觉不太好,我担心应用程序架构或 JVM 的一些未来变化可能会搞砸调用栈。

标签: javaspringhibernatereflectionaop

解决方案


如您的情况:“检查”是 MyDao 的属性,您想从方法范围内动态更改它,如果您使用单个实例,这可能会导致并发问题,不推荐。

正如上面用户所说,您可以在您的应用程序中使用两个 MyDao 实例,一个声明为 True,另一个声明为 False,您的控制器决定使用哪一个。


推荐阅读