通知advice
2024-09-01 22:44:36
基于注解的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.结果
最新文章
- MySQL添加用户、删除用户与授权
- linux -a 到 -z 的意义
- 对于 ThreadLocal 的理解和应用
- sessionId在fragment里无法保存的问题
- Cocos2d-x——Cocos2d-x 屏幕适配新解 – 兼容与扩展【转载】
- 2326: [HNOI2011]数学作业 - BZOJ
- jersey 过滤器
- Lecture Halls
- java.net.MulticastSocket Example--reference
- js checkbox多选值采集
- iis处理请求随记回顾
- HDU-4861-Couple doubi(数学题,难懂!难懂!)
- vb是如何连接数据库的
- [NOI2005] 维护数列
- python之路第二天 随便记记 今天主要很郁闷
- java 引用数据类型(类)
- Kail Linux的安装方法
- Elasticsearch和HDFS 容错机制 备忘
- 【C++ Primer | 15】虚继承
- [Hi3520DV200]烧录