NutzCN Logo
问答 拦截器中对数据库的操作,业务方法对数据库的操作,是否在同一个事务里面?
发布于 15天前 作者 qq_7fafbecc 81 次浏览 复制 上一个帖子 下一个帖子
标签:

业务方法:

	@ServiceLog
	@EventLog
	@Aop(TransAop.READ_COMMITTED)
	public Object deleteInfo(NutMap map) throws BusinessException {
		BagInfo bagInfo = new BagInfo();
		int updateNum = 0;
		String bagCode = map.get("bagCode").toString();
		updateNum = dao.delete(BagInfo.class,bagCode);
		dao.delete(BloodIn.class,bagCode);
		dao.delete(BloodStorage.class,bagCode);
		return updateNum;
	}

AOP拦截器方法:

@IocBean
public class EventLogInterceptor implements MethodInterceptor {

	@Inject    //AnnotationIocLoader根据这个注解来了解类中的字段,具体的注入方式
    protected Dao dao;
	
	@Override
	public void filter(InterceptorChain chain) throws Throwable {
		// TODO Auto-generated method stub
		chain.doChain();// 继续执行其他拦截器
		String ServiceName = chain.getCallingObj().getClass().getName();
		int loc = ServiceName.indexOf("$");//首先获取字符的位置
		ServiceName = ServiceName.substring(0,loc);//再对字符串进行截取,获得想要得到的字符串
		String ServiceMethodName = chain.getCallingMethod().getName();
		System.out.println("================拦截器中,进行事件记录,向后台事件表写入记录:==============>");
		Sql sql = Sqls.create("insert into BLOOD_SYS_EVENT values ('0001','0002')");
		dao.execute(sql);
	}

}
4 回复

@Aop可以传数组,里面有顺序

就是说,抛弃自定义注解,这样写

@Aop({TransAop.xxxx,  "eventLogInterceptor", "xxxx"}

@Aop({TransAop.xxxx, "eventLogInterceptor", "???"}
后面这个是写对象名吗?还是deleteInfo这种业务方法名?

拦截器的ioc name,默认是首字母小写的类名,就是@IocBean的name

还有一个思路,就是自定义拦截器里面加Trans.exec

添加回复
请先登陆
回到顶部