![](/img/trans.png)
[英]Spring Data - @Transactional annotation in Service class raises AopConfigException
[英]How to invoke a method in a service class with @transactional and @service annotation by reflection?
首先,請原諒我的英語不好,我只是在努力學習英語。
我試圖找到一種簡單的方法來設置前端和后端之間的通信更為簡單,因為我將ActiveMQ用作面向消息的中間件。 因此XML字符串成為了請求的載體。
例如,前端向后端發送一個字符串請求,包括程序包名稱,類名稱,方法名稱和參數列表,這樣,后端就可以通過這些信息來調用正確的方法,然后將調用結果發送回到前端。 它有效,但並不完美。 問題是,當我嘗試使用@Transational
和@Service
注釋(這是連接數據庫的常見做法)在服務類中調用方法時,事務似乎沒有打開,請求和響應都被接收到,每次與ActiveMQ的使用者一樣,在mysql數據庫進程中留下了很多睡眠連接。
服務類中的目標方法:
@Service
@Transactional
public class UserService {
@Autowired
private IUserDAO udao;
public User getUserByName(String username) {
return udao.findByUsername(username);
}
}
調用方法(省略了一些代碼):
@Component
public class ReflectTool {
public Object invokeMethod(String packageName,String className,String methodName,List paramList) {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("applicationContext.xml");
Object obj = beanFactory.getBean(packageName+"."+className);
Class cla = obj.getClass();
Method method = findMethod(Class cla,String methodName);
return method.invoke(obj, params);
}
}
我搜索了很多答案,但沒有一個起作用。 就像:使用代理對象而不是目標對象來調用,因為spring框架使用了具有@Transactional
批注的代理類而不是服務類來幫助我們管理事務,但是代碼( AopUtils.isAopProxy(obj)
)返回true
,是否意味着該對象正是我從spring上下文中獲得的代理對象? 我對Dynamic Agent Model不太熟悉。
感謝您的關注,如果我做錯了,請告訴我。
好吧,我正要嘗試以下方法:
不要使用BeanFactory,在ReflectTool中插入ApplicationContect:@Autowired私有ApplicationContext applicationContext; 如果要恢復的bean實現了某個接口或擴展了一個類,則可以用Map替換此注入。 春天會使它工作
嘗試獲取所需的bean對象。
關於該方法的捕獲和執行的代碼行應該起作用,因為它是一個調用另一個bean的bean。
希望這可以幫助。 我遇到了類似的情況,我需要調用@Transactional方法,並以與上述類似的方式進行修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.