从spring容器获得目标类,进行aop配置从而让spring创建代理类。全自动过程。即传统spring
aop的实现过程
预备工作:添加aop命名空间
目标类及其接口:
public interface UserService { public void addUser(); public void updateUser(); }
public class UserServiceImpl implements UserService { @Override public void addUser() { System.out.println("spring aop add user"); } @Override public void updateUser() { System.out.println("spring aop update user"); } }
切面类:
public class MyAspect implements MethodInterceptor { @Override public Object invoke(MethodInvocation mi) throws Throwable { System.out.println("前"); Object obj = mi.proceed(); System.out.println("后"); return obj; } }
本博文的重点在xml配置:
<?xml version="1.0" encoding="UTF-8"?> <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" 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"> <!-- 1 创建目标类 --> <bean id="userServiceId" class="com.canyugan.c_aop.UserServiceImpl"></bean> <!-- 2创建切面类(通知) --> <bean id="myAspectId" class="com.canyugan.c_aop.MyAspect"></bean> <!-- 3 spring 传统aop开发,使 通知 引用到 目标类切入点上 * 添加aop命名空间 * aop 编程 <aop:config> * <aop:pointcut> 用于声明切入点,确定目标类上的那些方法将被增强。 id : 切入点名称 expression : 用于编写切入点表达式 (aspectj 切入点表达式) execution(* com.itheima.c_aop.*.*(..)) 固定 返回值类型 包 类名 方法名 参数列表 * <aop:advisor> 特殊的切面,只有一个切入点和一个通知 advice-ref:一个通知引用 pointcut-ref:一个切入点引用 --> <aop:config> <aop:pointcut expression="execution(* com.canyugan.c_aop.*.*(..))" id="myPointCut"/> <aop:advisor advice-ref="myAspectId" pointcut-ref="myPointCut"/> </aop:config> </beans>
时间: 2024-10-09 04:12:32