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