1. 首页
  2. 软件开发
  3. Spring——AOP的代理模式包括动态代理和静态代理

Spring——AOP的代理模式包括动态代理和静态代理

  • 发布于 2024-08-17
  • 0 次阅读

AOP(面向切面编程)是一种编程范式,用于将横切关注点(如日志记录、事务管理)与核心业务逻辑分离开来,以提高代码的模块性和可重用性。AOP的主要场景包括日志记录、事务管理、安全控制、性能监控等。

在Spring框架中,AOP通过代理模式来实现,其中包括静态代理和动态代理两种方式。静态代理是在编译时期就已经确定代理对象,而动态代理是在运行时动态创建代理对象。

使用Spring AOP结合动态代理来实现日志记录代码如下:

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.framework.ProxyFactory;

public class LoggingAspect implements MethodInterceptor {
   

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
   
        System.out.println("Before method: " + invocation.getMethod().getName());
        Object result = invocation.proceed();
        System.out.println("After method: " + invocation.getMethod().getName());
        return result;
    }

    public static void main(String[] args) {
   
        ProxyFactory proxyFactory = new ProxyFactory(new MyService());
        proxyFactory.addAdvice(new LoggingAspect());
        MyService proxy = (MyService) proxyFactory.getProxy();
        proxy.doSomething();
    }
}

class MyService {
   
    public void doSomething() {
   
        System.out.println("Doing something...");
    }
}

LoggingAspect类实现了MethodInterceptor接口,用于定义日志记录的逻辑。通过ProxyFactory创建代理对象,并将LoggingAspect作为通知(Advice)添加到代理对象中。最后,调用代理对象的方法会触发LoggingAspect中定义的日志记录逻辑。

原文链接: https://blog.csdn.net/2401_82884096/article/details/137868252