在 Spring AOP 中,代理模式是一種非常重要的設計模式,它使得我們可以在不修改原始類的情況下,為其添加新的功能。Spring AOP 默認使用 JDK 動態代理或者 CGLIB 代理來實現 AOP 功能。
以下是如何在 Spring AOP 中使用代理模式的簡單示例:
public interface MyService {
void doSomething();
}
public class MyServiceImpl implements MyService {
@Override
public void doSomething() {
System.out.println("Doing something...");
}
}
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(* com.example.MyService.*(..))")
public void myPointcut() {
}
@Before("myPointcut()")
public void beforeAdvice() {
System.out.println("Before advice is executed");
}
@After("myPointcut()")
public void afterAdvice() {
System.out.println("After advice is executed");
}
}
<aop:aspectj-autoproxy />
或者在 Java 配置類中啟用 AOP:
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
MyService myService = context.getBean(MyService.class);
myService.doSomething();
}
}
運行上述代碼,你會看到在調用 doSomething()
方法之前和之后,分別輸出了 “Before advice is executed” 和 “After advice is executed”。這說明在不修改 MyServiceImpl
類的情況下,我們成功地為其添加了新的功能。這就是 Spring AOP 中的代理模式的基本用法。