我想看看是否已经有类似的问题,但找不到,就在这里。
我们有一个遗留代码,其中单个 BO 使用反射对许多 DAO 进行方法调用。为了简单起见,我修改了代码。
@Transactional
class EndpointData1DAO implements DAO{
void inserData() {
// insert data 1
}
}
@Transactional
class EndpointData2DAO implements DAO{
void inserData() {
// insert data 2
}
}
class MachoBO {
void handleEverything(String daoName) {
DAO dao = getDAOUsingReflection(daoName);
dao.insertData();
}
}
问题是,要求发生了变化,因此当在 EndpointData1DAO 上调用 insertData() 时,也必须调用 EndpointData2DAO 的 insertData。
我可以简单地将 EndpointData2DAO 添加为 EndpointData1DAO 的成员,但这严重违反了 SRP 并使其变得丑陋。
所以我写了一个注释@ExecuteAfter(clazz=EndpointData2DAO.class, method="insertData"),它获取EndpointData2DAO的一个实例并调用insertData(),在它注释的类的方法被执行之后,通过使用aop:after ,所以给定
@Transactional
@ExecuteAfter(clazz=EndpointData2DAO.class, method="insertData")
class EndpointData1DAO implements DAO{
void inserData() {
System.out.println("insert1");
}
}
@Transactional
class EndpointData2DAO implements DAO{
void inserData() {
System.out.println("insert2");
}
}
class MachoBO {
void handleEverything(String daoName) {
DAO dao = getDAOUsingReflection(daoName);
dao.insertData();
}
1 2 将在调用 machoBO.handleEverthing("Data1"); 时打印出来
现在我的问题是,EndpointData1DAO 和 EndpointData2DAO 的 insertData() 会在同一个物理事务中吗?换句话说,EndpointData2DAO 的 insertData() 中的运行时异常会回滚 EndpointData1DAO 的 insertData() 插入的数据吗?
多谢提前~!!