AOP面向切面编程
面向对象的编程思想是从上往下,但是面向切面编程的时候就是横向的,思考如下:
创建出对象,里面有a对象的方法,也有b对象的方法,横向抽取两个对象的方法,然后存如到代理对象,就像bean在构造好之后,并没有立即使用,而是经过一步步的增强,BeanDefinitionPostProcessor,BeanPostProcessor,都会增强bean,往里面注入bean原本没有的一些方法,本人暂时把AOP认为是这样…
实现service层方法增强
思路:
创建一个类,将增强的方法注入到service的方法,并且返回service的方法:
@Component
public class MyMethodProcessor implements BeanPostProcessor,ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean.getClass().getPackage().getName().equals("com.liku.service.impl")) {
Object o = Proxy.newProxyInstance(
bean.getClass().getClassLoader(),
bean.getClass().getInterfaces(),
(Object proxy, Method method, Object[] args) -> {
UserDao bean1 = applicationContext.getBean(UserDao.class);
bean1.before();
bean1.show();
Object invoke = method.invoke(bean, args);
bean1.after();
return invoke;
}
);
return o;
}
return bean;
}
}
实现BeanPostProcessor,在bean初始化之前给它增强并返回,实现ApplicationContextAware接口的set方法,注入applicationContext。以上就实现了方法的增强。
AOP相关概念
目标对象:target,被增强的方法所在的对象
代理对象:proxy,对目标对象进行增强后的对象
连接点:joinPoint,目标对象中可以被增强的方法
切入点:pointCut,目标对象中实际被增强的方法
通知:advice,增强的代码逻辑
切面:aspect,增强和切入点的结合
织入:weaving,将通知和切入点结合动态组合的过程
标签:applicationContext,增强,对象,Object,bean,AOP,方法 From: https://www.cnblogs.com/Liku-java/p/17154941.html