Spring AOP面向切面编程如何实现业务逻辑与横切关注点分离?

2026-04-15 09:039阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计345个文字,预计阅读时间需要2分钟。

Spring AOP面向切面编程如何实现业务逻辑与横切关注点分离?

javaproxy类+package+pidan.proxy;import+java.lang.reflect.InvocationHandler;import+java.lang.reflect.Method;import+java.lang.reflect.Proxy;/*** proxyTest: 动态代理类* proxy: 针对接口的代理类* 媒体: 代理类* 女方: 目标类*/

Spring AOP面向切面编程如何实现业务逻辑与横切关注点分离?

proxy代理类

package pidan.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * proxyTest:动态代理类 * proxy:针对接口的 * 媒婆:代理类 * 女方:目标类 * */ public class ProxyTest implements InvocationHandler { //目标类 private Object obj; //获取代理类 public Object getProxy(Object _obj){ this.obj=_obj; //System.out.println(obj); //生成一个代理类 //this.getClass().getClassLoader() :代理类的构造器 //obj.getClass().getInterfaces() :目标类的接口 return Proxy.newProxyInstance(this.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { Object result=null; System.out.println("---开始打开连接---"); result=arg1.invoke(obj, arg2); System.out.println("---关闭连接---"); return result; } } spring Test

package pidan.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import pidan.dao.IUserService; import pidan.dao.UserService; public class SpringAopTest { public static void main(String[] args) throws Exception { ApplicationContext context=new ClassPathXmlApplicationContext("spring_application.xml"); IUserService service=context.getBean(IUserService.class); service.add(); service.delete(); } } 前置增强

package pidan.aop; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class Before implements MethodBeforeAdvice{ @Override public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { System.out.println("我是前置增强AOP-before"); } } 后置增强

package pidan.aop; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class AfterReturning implements AfterReturningAdvice{ @Override public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { System.out.println("我是后置增强aop-afterreturning"); } }

本文共计345个文字,预计阅读时间需要2分钟。

Spring AOP面向切面编程如何实现业务逻辑与横切关注点分离?

javaproxy类+package+pidan.proxy;import+java.lang.reflect.InvocationHandler;import+java.lang.reflect.Method;import+java.lang.reflect.Proxy;/*** proxyTest: 动态代理类* proxy: 针对接口的代理类* 媒体: 代理类* 女方: 目标类*/

Spring AOP面向切面编程如何实现业务逻辑与横切关注点分离?

proxy代理类

package pidan.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * proxyTest:动态代理类 * proxy:针对接口的 * 媒婆:代理类 * 女方:目标类 * */ public class ProxyTest implements InvocationHandler { //目标类 private Object obj; //获取代理类 public Object getProxy(Object _obj){ this.obj=_obj; //System.out.println(obj); //生成一个代理类 //this.getClass().getClassLoader() :代理类的构造器 //obj.getClass().getInterfaces() :目标类的接口 return Proxy.newProxyInstance(this.getClass().getClassLoader(), obj.getClass().getInterfaces(), this); } @Override public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable { Object result=null; System.out.println("---开始打开连接---"); result=arg1.invoke(obj, arg2); System.out.println("---关闭连接---"); return result; } } spring Test

package pidan.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import pidan.dao.IUserService; import pidan.dao.UserService; public class SpringAopTest { public static void main(String[] args) throws Exception { ApplicationContext context=new ClassPathXmlApplicationContext("spring_application.xml"); IUserService service=context.getBean(IUserService.class); service.add(); service.delete(); } } 前置增强

package pidan.aop; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class Before implements MethodBeforeAdvice{ @Override public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { System.out.println("我是前置增强AOP-before"); } } 后置增强

package pidan.aop; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class AfterReturning implements AfterReturningAdvice{ @Override public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable { System.out.println("我是后置增强aop-afterreturning"); } }