aop在spring中的作用
如图所示:

即:可以理解为在不改变原有的代码的情况下,去增加新的功能。
添加依赖:
-
org.aspectj -
aspectjweaver -
1.9.4 -
第一种方式:
首先编写我们的业务接口和实现类
- public interface UserService {
-
- //增
- public void add();
-
- //删除
- public void delete();
-
- //改
- public void update();
-
- // 查
- public void select();
-
-
- }
实现类
- public class UserServiceImpl implements UserService{
-
-
-
- @Override
- public void add() {
- System.out.println("增加一个用户");
- }
-
-
- @Override
- public void delete() {
- System.out.println("删除了一个用户");
- }
-
-
- @Override
- public void update() {
- System.out.println("更新了一个用户");
- }
-
-
- @Override
- public void select() {
- System.out.println("查询了一个用户");
- }
-
-
- }
然后去写我们的增强类,编写两个一个前置增强,一个后置增强。
前置增强:
- public class Log implements MethodBeforeAdvice {
-
-
- //重写接口抽象方法 method 要执行的目标对象的方法
- @Override
- public void before(Method method, Object[] args, Object target) throws Throwable {
- // 参数 //目标对象
-
- // 获取反射对象 然后.getname()
- System.out.println(target.getClass().getName()+""+"的"+method.getName()+"被执行了");
-
-
- }
-
- }
后置增强:
- public class AfterLog implements AfterReturningAdvice {
-
- @Override
- public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
-
- System.out.println("执行了"+method.getName()+"方法,返回的结果为:"+returnValue);
-
- }
-
- }
最后在去spring中注册,并且实现aop切入实现,并且导入约束。
- "1.0" encoding="UTF-8"?>
"http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
- 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">
-
-
-
-
"pointcut" expression="execution(* com.kuang.service.UserServiceImpl.*(..))"/> -
-
-
"log" pointcut-ref="pointcut"/> -
"afterLog" pointcut-ref="pointcut"/> -
-
-
-
测试结果:

第二种方式:
自定义类来实现:
目标业务不变依旧是:userServiceImpl
第一步:写我们自己的一个切入类,
- // 自定义一个类,变成他的切面。
- public class DiyPointCut {
-
- public void before(){
- System.out.println("*****方法执行前**********88");
- }
-
-
- public void after(){
- System.out.println("*****方法执行后************");
- }
-
-
- }
到spring中去配置:
"diy" class="com.kuang.diy.DiyPointCut"/> -
-
-
-
-
-
"diy" - >
-
-
"point" expression="execution(* com.kuang.service.UserServiceImpl.*(..))"/> -
-
"before" pointcut-ref="point"/> -
-
"after" pointcut-ref="point"/> -
-
-
-
-
测试结果:

'