Я пытался увидеть, есть ли уже подобный вопрос, но не смог его найти, вот он.
У нас есть устаревший код, где один 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();
}
}
проблема в том, что требование изменилось, поэтому когда вызывается метод insertData () для EndpointData1DAO, должен вызываться также метод insertData для EndpointData2DAO.
iмог бы просто добавить 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");
Теперь мой вопрос: будут ли insertData () EndpointData1DAO и EndpointData2DAO находиться в одной физической транзакции?другими словами, будет ли исключение времени выполнения в методе insertData () EndpointData2DAO откатывать данные, вставленные функцией EndDodeData1DAO 'insertData ()?
за много раз спасибо ~ !!