import java.sql.Connection; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.zy.dev.dao.impl.JdbcDao; @Aspect @Component public class TxAop { @Autowired JdbcDao jdbcDao; Connection conn; @Before("execution(public * com.zy.dev.service.UserService.*(..))") public void before(JoinPoint joinPoint) throws Exception { conn = jdbcDao.getJdbcTemplate().getDataSource().getConnection(); conn.setAutoCommit(false); Object[] args = joinPoint.getArgs(); String name = joinPoint.getSignature().getName(); System.out.println("执行" + name + "前执行---日志"); } @After("execution(public * com.zy.dev.service.UserService.*(..))") public void atfer(JoinPoint joinPoint) throws Exception { //conn.commit(); conn.commit(); String name = joinPoint.getSignature().getName(); System.out.println("执行" + name + "后执行---日志"); } @AfterThrowing(value = "execution(public * com.zy.dev.service.UserService.*(..))", throwing = "e") public void atfer(JoinPoint joinPoint, Throwable e) throws Exception { conn.rollback(); e.printStackTrace(); String name = joinPoint.getSignature().getName(); System.out.println("执行" + name); } }
配置文件 <aop:aspectj-autoproxy proxy-target-class="true" />
如果其中切面调用方法有两次执行,那么查看spring的切面这类配置了注解和xml两种,去掉其中一种就可以 <bean class="com.zy.dev.service.TxAop"></bean>和 @Aspect @Component public class TxAop { 只能要一种
配置切面出现问题,执行监听前后方法执行两次情况
最新推荐文章于 2023-11-03 17:39:15 发布