博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring框架学习6:spring-aop的五种通知类型
阅读量:5080 次
发布时间:2019-06-12

本文共 1883 字,大约阅读时间需要 6 分钟。

使用springaop时需要注意,如果bean对象,即service层的对象没有实现接口的话,使用spring-aop的话会报错,因此需要在service层创建接口。

spring-aop的基层是基于动态代理来实现的,的实现有两种方式:

1.jdk动态代理

  spring模式默认使用jdk动态代理,jdk动态代理要求目标类的对象必须实现一个接口,而且获取目标类对象的时候要做向上转型为接口。

2.cglib动态代理

  cglib代理方式spring aop也支持,cglib实现动态代理的时候,不需要目标类实现接口,如果要把spring aop的代理方式改为cglib,需要如下配置:

  

  proxy-target-class如果设置成true使用cglib动态代理,默认是false使用jdk动态代理。
spring的五种通知类型:
通知类型 说明
aop:before 前置通知 在目标方法调用之前执行
aop:after-returning后置通知 在目标方法调用之后执行,一旦目标方法产生异常不会执行
aop:after 最终通知 在目标调用方法之后执行,无论目标方法是否产生异常,都会执行
aop:after-throwing 异常通知 在目标方法产生异常时执行
aop:around 环绕通知 在目标方法执行之前和执行之后都会执行,可以写一些非核心的业务逻辑,一般用来替代前置通知和后置通知
 
 
 
 
 
 
 
 
 
 
 
 
使用注解的方式配置spring-aop:
1.创建通知类
package com.zs.advice;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.stereotype.Component;/** * 用户业务通知 */@Component@Aspectpublic class UserAdvice {    @After("execution(void *User(..))")    public void log() {        System.out.println("生成日志文件");    }    @Before("execution(void *User(..))")    public void yanzheng() {        System.out.println("验证数据");    }    @AfterThrowing(pointcut = "execution(void *User(..))",throwing = "e")    public void error(Exception e) {        System.out.println("异常处理");    }}
 
2.spring配置文件中声明使用注解的方式配置spring-aop;

3.测试

import com.zs.entity.User;import com.zs.service.UserService;import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class AopTest { private ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); @Test public void fun1() { UserService us = (UserService) context.getBean("userService"); us.saveUser(new User()); } }

结果如下:

 

 

 

转载于:https://www.cnblogs.com/Zs-book1/p/11073415.html

你可能感兴趣的文章
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>