基本概念
Aspect Oriented Programming,面向切面编程
作用:对某一些方法进行增强
与动态代理的区别:
- 动态代理:委托类中的全部方法
- AOP:容器中的组件里的指定的方法
底层使用的代理:JDK和cglib
编程术语
委托类(target):也叫目标类,被代理类,有方法需要被增强的类
代理类(proxy):方法已经增强的类
织入(weaver):通过委托类生成代理对象的动作
切入点(Pointcut):所有可能被增强的方法
连接点(JoinPoint):代理对象正在执行的增强的方法
通知(Advice):通知切入点范围的方法要做什么样的增强

入门案例
现在有委托类:
@Service
public class UserServiceImpl implements UserService{
@Override
public void sayHello(String name) {
System.out.println("hello " + name);
}
}
需求是在执行sayHello()方法的时候会在执行前输出“正道的光”,执行后输出“照在大地上”
- 先写通知类
@Component
public class CustomAdvice implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
//method.invoke(object,args);
// 执行的是委托类的代码
System.out.println("正道的光");
Object proceed = methodInvocation.proceed();// 执行的是委托类的代码
System.out.println("照在大地上");
return proceed;
}
}
- 配置文件中配置:
<bean id="userServiceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--委托类组件-->
<property name="target" ref="userServiceImpl"/>
<!--通知-->
<property name="interceptorNames" value="customAdvice"/>
</bean>

本文介绍了Spring AOP(面向切面编程)的基本概念,包括其与动态代理的区别。AOP用于对特定方法进行增强,而动态代理则针对委托类的所有方法。文中通过一个具体的例子展示了如何使用Spring AOP在调用`sayHello`方法前后添加自定义日志输出。首先创建了一个通知类`CustomAdvice`实现`MethodInterceptor`接口,然后在配置文件中使用`ProxyFactoryBean`为`UserServiceImpl`创建代理对象,实现了在方法执行前后插入特定操作的功能。
3053

被折叠的 条评论
为什么被折叠?



