基于注解的Spring AOP开发,来自https://www.cnblogs.com/junzi2099/p/8274813.html

1.定义目标类接口和实现类

2.编写Spring AOP的aspect 类

@Aspect
public class MyAspect { /**
* 前置通知
*/
@Before("execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
public void before(){
System.out.println("前置通知....");
} /**
* 后置通知
* returnVal,切点方法执行后的返回值
*/
@AfterReturning(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))",returning = "returnVal")
public void AfterReturning(Object returnVal){
System.out.println("后置通知...."+returnVal);
} /**
* 环绕通知
* @param joinPoint 可用于执行切点的类
* @return
* @throws Throwable
*/
@Around("execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("环绕通知前....");
Object obj= (Object) joinPoint.proceed();
System.out.println("环绕通知后....");
return obj;
} /**
* 抛出通知
* @param e
*/
@AfterThrowing(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))",throwing = "e")
public void afterThrowable(Throwable e){
System.out.println("出现异常:msg="+e.getMessage());
} /**
* 无论什么情况下都会执行的方法
*/
@After(value="execution(* com.zejian.spring.springAop.dao.UserDao.addUser(..))")
public void after(){
System.out.println("最终通知....");
}
}

3.编写配置文件交由Spring IOC容器管理

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 启动@aspectj的自动代理支持-->
<aop:aspectj-autoproxy /> <!-- 定义目标对象 -->
<bean id="userDaos" class="com.zejian.spring.springAop.dao.daoimp.UserDaoImp" />
<!-- 定义aspect类 -->
<bean name="myAspectJ" class="com.zejian.spring.springAop.AspectJ.MyAspect"/>
</beans>

4.编写测试类

/**
* Created by zejian on 2017/2/19.*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:spring/spring-aspectj.xml")
public class UserDaoAspectJ {
@Autowired
UserDao userDao; @Test
public void aspectJTest(){
userDao.addUser();
}
}

5.结果

  


最新文章

  1. MySQL添加用户、删除用户与授权
  2. linux -a 到 -z 的意义
  3. 对于 ThreadLocal 的理解和应用
  4. sessionId在fragment里无法保存的问题
  5. Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】
  6. 2326: [HNOI2011]数学作业 - BZOJ
  7. jersey 过滤器
  8. Lecture Halls
  9. java.net.MulticastSocket Example--reference
  10. js checkbox多选值采集
  11. iis处理请求随记回顾
  12. HDU-4861-Couple doubi(数学题,难懂!难懂!)
  13. vb是如何连接数据库的
  14. [NOI2005] 维护数列
  15. python之路第二天 随便记记 今天主要很郁闷
  16. java 引用数据类型(类)
  17. Kail Linux的安装方法
  18. Elasticsearch和HDFS 容错机制 备忘
  19. 【C++ Primer | 15】虚继承
  20. [Hi3520DV200]烧录

热门文章

  1. 《手把手教你》系列练习篇之5-python+ selenium自动化测试(详细教程)
  2. 为什么服务器突然回复RST——小心网络中的安全设备
  3. tcp协议传输方法&amp;粘包问题
  4. 在jsp页面中设置中序号
  5. thinkPHP5开发智慧软文遇到的分页第二页不显示数据的问题
  6. Hyperledger Fabric手动生成CA证书搭建Fabric网络
  7. 使用IDEA开发Spring入门程序
  8. ARTS-S anaconda常用命令
  9. imagenet-vgg-verydeep-19.mat格式详解
  10. Python3 面向对象进阶2