阅读量:0
在 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"); } }
- 在 Spring 配置文件中启用 AOP:
<aop:aspectj-autoproxy />
或者在 Java 配置类中启用 AOP:
@Configuration @EnableAspectJAutoProxy public class AppConfig { }
- 在主程序中测试 AOP:
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 中的代理模式的基本用法。