9-8:spring编写代理:【expression表达式通过XML配置来实现AOP】
- 让spring 创建代理对象,从spring容器中手动的获取代理对象。
- 导入jar包:
核心:4+1
AOP:AOP联盟(规范)、spring-aop (实现)织入包 aop联盟包
9-8-1:目标类和接口
public interface UserService { public void addUser(); public void updateUser(); public void deleteUser(); } @Service("userServiceId") public class UserServiceImpl implements UserService {
public void addUser() { System.out.println("c_aspectJ_aop addUser"); } public void updateUser() { System.out.println("c_aspectJ_aop updateUser"); } public void deleteUser() { System.out.println("c_aspectJ_aop deleteUser"); } } |
9-8-2: 切面类
import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class MyAspect implements MethodInterceptor{ public Object invoke(MethodInvocation arg0) throws Throwable { // TODO Auto-generated method stub System.out.println("方法前处理"); Object obj=arg0.proceed();//执行目标行为 System.out.println("方法后处理"); return obj; } } |
9-8-2:测试类:
public class TestSpringAOP {
public static void main(String[] args) { TestSpringAOP aop=new TestSpringAOP(); aop.demo01(); } public void demo01(){ String xmlPath = "com/hx/aop/auto/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); //获得目标类 UserService userService = (UserService) applicationContext.getBean("userServiceId"); userService.addUser(); userService.updateUser(); userService.deleteUser(); } } |
9-8-3: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.hx.aop.auto.UserServiceImpl"></bean> <!-- 2 创建切面类(通知) --> <bean id="myAspectId" class="com.hx.aop.auto.MyAspect"></bean> <!-- 3 aop编程 3.1 导入命名空间 3.2 使用 <aop:config>进行配置 proxy-target-class="true" 声明时使用cglib代理 <aop:pointcut> 切入点 ,从目标对象获得具体方法 <aop:advisor> 特殊的切面,只有一个通知 和 一个切入点 advice-ref 通知引用 pointcut-ref 切入点引用 3.3 切入点表达式 execution(* com.hx.c_spring_aop.*.*(..)) 选择方法 返回值任意 包 类名任意 方法名任意 参数任意
--> <aop:config proxy-target-class="true"> <aop:pointcut expression="execution(* com.hx.aop.auto.*.*(..))" id="myPointcut"/> <aop:advisor advice-ref="myAspectId" pointcut-ref="myPointcut"/> </aop:config> </beans> |