Springトランザクション@Transactional注記による動的エージェントの失効問題

2073 ワード

質問説明:@Transactional注釈を使用してトランザクションを開くサービスがあります.「spring+mybatis注釈構成トランザクション失効問題」の説明を参照してください.もともと私はエージェント反射呼び出しを使用してこのサービスの2つの方法(インタフェース以外の方法、他のインタフェースの方法が使いやすい)を呼び出しましたが、トランザクション注釈を使用しない前は使いやすく、トランザクションを追加した後は使いにくいです.
サービスクラスの一部のコードは次のとおりです.
/**
 * 

* *

*/ @Transactional @Service("payBookService") public class PayBookService extends CommonService implements ICommonService,IPayBookService { private static Logger logger = Logger.getLogger(PayBookService.class); @Resource(name = "payBookMapper") private PayBookMapper payBookMapper; @Override public List> selectFSData(Map map) {
サービスを呼び出すコードは次のとおりです.
 
private List> getSendMessage(String clazzName,String methodName,List> data) throws Exception {
		List> dataList;
		try {
			obj=(ICommonService)DBUtil.getBeanByName(clazzName);
		} catch (Exception e) {
			throw new Exception("             "+e.getCause().getMessage());
		}
		Method mth;
		try {
			mth = obj.getClass().getMethod(methodName,new Class[] {Map.class});
			dataList = (List>)mth.invoke(obj,(List>)data);
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("              "+e.getCause().getMessage());
		}
		return dataList;
	}
トランザクション・ノートはクラス・ベースの動的エージェントを無効にし、インタフェース・ベースのエージェントしか使用できないため、インタフェースIPayBookServiceを追加して呼び出せない2つのメソッドを追加し、サービスを実装すればよい
import java.util.List;
import java.util.Map;

public interface IPayBookService {
    /**
     *      
     * @param fsdatalist
     * @return
     */
    public Map updateFSDataConfirm(List> fsdatalist);
    
    /**
     *      
     * @param fsdatalist
     * @return
     */
    public Map selectVilidateQuery(List> fsdatalist);
    
}
私はただspringのこれらの現象を知っていて、もしどの友达がその中の原理を知っているならば、教えてあげることを惜しまないでください