手撕Spring5框架(七)基于XML配置文件方式实现AOP具体操作

tech2025-01-22  23

创建类,被增强类和增强类 package org.learn.spring5.service; public interface UserService { void add(); void del(); void update(); void query(); } package org.learn.spring5.service.impl; import org.learn.spring5.service.UserService; public class UserServiceImpl implements UserService { public void add() { //int i=10/0; System.out.println("add"); } public void del() { System.out.println("del"); } public void update() { System.out.println("update"); } public void query() { System.out.println("query"); } }

 

package org.learn.spring5.service.impl; import org.aspectj.lang.ProceedingJoinPoint; //增强类,编写增强的方法 public class UserServiceProxy { public void before(){ System.out.println("before"); } public void after(){ System.out.println("After"); } public void afterReturning(){ System.out.println("afterReturning"); } public void afterThrowing(){ System.out.println("AfterThrowing"); } public void around(ProceedingJoinPoint proceedingJoinPoint){ System.out.println("环绕之前"); try { proceedingJoinPoint.proceed(); } catch (Throwable throwable) { throwable.printStackTrace(); } System.out.println("环绕之后"); } }

   2. 配置XML文件 bean1.xml

1)创建对象

2)配置AOP部分

<?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 https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--Spring AOP操作,基于XML实现方式--> <!--对象创建--> <bean id="userServiceImpl" class="org.learn.spring5.service.impl.UserServiceImpl"></bean> <bean id="userServiceProxy" class="org.learn.spring5.service.impl.UserServiceProxy"></bean> <!-- 配置AOP增强--> <aop:config> <!--切入点--> <aop:pointcut id="p" expression="execution(* org.learn.spring5.service.impl.UserServiceImpl.add(..))"/> <!--配置切面--> <aop:aspect ref="userServiceProxy"> <aop:before method="before" pointcut-ref="p"/> <aop:after method="after" pointcut-ref="p"/> <aop:after-returning method="afterReturning" pointcut-ref="p"/> <aop:after-throwing method="afterThrowing" pointcut-ref="p"/> <aop:around method="around" pointcut-ref="p"/> </aop:aspect> </aop:config> </beans>

    3. 编写测试类

import org.junit.Test; import org.learn.spring5.service.UserService; import org.learn.spring5.service.impl.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring5 { /** * Spring AOP实现 基于XML方式 */ @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); UserService userService = context.getBean("userServiceImpl", UserService.class); userService.add(); } }

 

最新回复(0)