Spring(九)--通知
2021-06-28 23:06
标签:整合 lap pen style factor col alt throws stack Spring原生的经典模式 实现AOP 如果想在项目中使用各种通知,必须引入需要的pom文件节点!
面对以上案例 发现几个问题: 1.每个代理工厂只能给一个目标对象服务!实际开发过程中,不止一个目标对象! 2.不能实现给 指定的 主业务增强! 3.测试类getBean的时候还是获取的代理!应该是service层对象才对! 以上问题怎么解决呢?想知道的话,下次再来吧!哈哈~~(先让我们的大脑旋转起来吧!) Spring(九)--通知 标签:整合 lap pen style factor col alt throws stack 原文地址:https://www.cnblogs.com/fl72/p/9647975.htmlSpring之Advice通知
advice :通知
前置通知:在目标方法执行之前执行!不能改变方法的执行流程和结果!
实现MethodBeforeAdvice接口!
后置通知:在目标方法执行之后执行!不能改变方法的执行流程和结果!
实现AfterReturningAdvice接口!
环绕通知:方法的拦截器!进入了方法体,能改变方法的执行流程和结果!
实现MethodInterceptor接口!
异常通知: 当我们的目标方法发生异常才会被执行!
实现ThrowsAdvice接口!
01.aop联盟
aopalliance
02. spring整合aop的jar
spring-aop
1. 创建需要的dao接口
2. 创建需要的daoImpl实现类
3. 创建前置增强类
4. 创建后置增强类
5. 创建环绕增强类
6. 创建异常增强类和自定义异常类
7. 配置spring.xml文件
8. 创建测试类
@Test //前置通知
public void testBefore(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
/**
* 获取的是代理工厂 返回的是目标对象
*/
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
System.out.println("***********************");
userDao.sleep();
}
@Test //后置通知
public void testAfter(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
userDao.eat();
}
@Test //环绕通知
public void testAround(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("userProxy",UserDao.class);
String result=userDao.eat();
System.out.println(result);
}
@Test //异常通知
public void testException(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserDao userDao= context.getBean("exceptionProxy",UserDao.class);
try {
userDao.login("aa","admin");
}catch (MyException ex){
ex.printStackTrace();
}
}