AOP
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,用于将横切关注点与业务逻辑分离。
AOP的实现原理主要包括以下几个步骤:
-
定义切面:指定在哪些类的哪些方法上切入。
-
代理生成:Spring使用AOP代理工厂(如JDK动态代理或CGLIB)来创建代理对象。
-
切面织入:将通知(如Before、After、Around)织入到代理对象的相应方法中。
// 定义一个业务接口和实现 public interface MyService { void serviceMethod(); } public class MyServiceImpl implements MyService { public void serviceMethod() { System.out.println("Service method executed"); } } // 定义一个切面 @Aspect public class MyAspect { @Before("execution(* com.example.MyService.*(..))") public void beforeAdvice() { System.out.println("Before advice"); } } // 配置文件 <beans> <bean id="myService" class="com.example.MyServiceImpl"/> <bean class="com.example.MyAspect"/> <!-- 启用AspectJ注解支持 --> <aop:aspectj-autoproxy/> </beans>
在这个例子中,MyServiceImpl是业务实现类,MyAspect是切面类,其中定义了一个前置通知。在Spring配置文件中,启用了AspectJ的注解支持
<aop:aspectj-autoproxy/>,这样Spring就会自动为带有@Aspect注解的类生成代理,并将通知织入到方法执行的相应环节。
PointCut
切入点,作用在方法上,可以被切面组合使用。
package com.xyz; public class Pointcuts { @Pointcut("execution(public * *(..))") public void publicMethod() {} @Pointcut("within(com.xyz.trading..*)") public void inTrading() {} @Pointcut("publicMethod() && inTrading()") public void tradingOperation() {} }
Advice
通知,通过before after等表达式,和切入点组合使用。
@Aspect public class BeforeExample {
// Same as pointcut definition @Before("execution(* com.xyz.dao.*.*(..))") public void doAccessCheck() { // ... }
// Use pointcut method
@Before("publicMethod()")
public void doAccessCheck2() {
// ...}}
Aspect
切面,通知spring框架自动配置。
package com.xyz; import org.aspectj.lang.annotation.Aspect; @Aspect public class NotVeryUsefulAspect { }
-

浙公网安备 33010602011771号