0
@Async
メソッドで@Afterと@Aroundを使用することはできますか?
は、私はこのような注釈の両方で試してみました:一部は、メソッドの終了前に呼び出されAsyncメソッドでのSpring AOPの使用
@Override
@SetUnsetEditingFleet
public void modifyFleet(User user, FleetForm fleetForm) throws Exception{
databaseFleetsAndCarsServices.modifyFleet(user, fleetForm);
}
@Around("@annotation(SetUnsetEditingFleet) && args(user, fleetForm)")
public void logStartAndEnd(ProceedingJoinPoint pjp, User user, FleetForm fleetForm) throws Throwable{
fleetServices.setEditingFleet(fleetForm.getIdFleet());
for(Car car : carServices.findByFleetIdFleet(fleetForm.getIdFleet())){
carServices.setEditingCar(car.getIdCar()); //Set cars associated with the fleet
}
pjp.proceed();
fleetServices.unSetEditingFleet(fleetForm.getIdFleet());
for(Car car : carServices.findByFleetIdFleet(fleetForm.getIdFleet())){
carServices.unSetEditingCar(car.getIdCar()); //Unset cars associated with the fleet
}
}
@Override
@Async
@Transactional(rollbackFor=Exception.class)
public void modifyFleet(User currentUser, FleetForm fleetForm) throws Exception {
//method instructions
後。 @After
と@Before
注釈でも試したところ、結果は同じです。
可能かどうかご存知ですか?
処理が新しいスレッドにディスパッチされたため、メソッドが終了しました。したがって、呼び出しコードの場合、メソッドの実行は終了しました。だからあなたはそれを使うことができますが、あなたはそれを使いたいものではありません。 –
したがって、 '@ Before'だけが使用できます。' @ After'部分は、新しいスレッドの開始後に呼び出され、最後には呼び出されません。それが正しいか? – luca
いいえ、メソッドの最後に呼び出されます。メソッドは、スレッドが開始されるとすぐに終了します。呼び出しコードの場合、メソッドの実行は終了します。 –