首页 > 其他分享 >AOP

AOP

时间:2023-02-25 18:12:03浏览次数:25  
标签:applicationContext 增强 对象 Object bean AOP 方法

AOP面向切面编程

面向对象的编程思想是从上往下,但是面向切面编程的时候就是横向的,思考如下:

1677297685784

创建出对象,里面有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

相关文章