java - 更改 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 的一些未来变化可能会搞砸调用栈。
解决方案
如您的情况:“检查”是 MyDao 的属性,您想从方法范围内动态更改它,如果您使用单个实例,这可能会导致并发问题,不推荐。
正如上面用户所说,您可以在您的应用程序中使用两个 MyDao 实例,一个声明为 True,另一个声明为 False,您的控制器决定使用哪一个。
推荐阅读
- html - 网页抓取自动登录vb
- postgresql - 为什么不能创建分区表
- wcf - 如何使用“curl”调用安全 (https) WCF 服务 - 仅限 GET 请求
- javascript - 使用 javascript 解析 html 中的数组并每次呈现不同的跨度
- r - R中nchar和object.size之间的区别
- jquery - FullCalendar - 动态添加事件不起作用
- java - spring jpa @PreUpdate 调用 PreUpdate 时丢失文件
- swift - 如何在swift3中使用mvvm检查模型
- android - 相机无法在 Moto X 中打开
- ios - 启动屏幕不显示徽标图像