【spring】 AOP-06

AOP

AOP就是通过BeanPostProcessor的postProcessorAfterInitialization方法(初始化后)实现的

AOP常见的时候方法有cglib与JDK动态代理,项目中采用JDK动态代理实现AOP。使用JDK动态代理要求bean实现接口,项目中定义了UserService这个接口

public interface UserService {
    void test();
}

UserServiceImpl实现了UserService接口

public class UserServiceImpl implements UserService

在bean生命周期最后一步-初始化后,调用beanPostProcessor的postProcessorAfterInitialization方法,生成代理对象,将代理对象注入到spring容器中,原始对象target没有注入到spring容器中

// postProcessorAfterInitialization 初始化后方法
for (BeanPostProcessor beanPostProcessor : beanPostProcessorList) {
  // instance引用可能改变,可能返回代理对象的引用
  instance = beanPostProcessor.postProcessAfterInitialization(instance, beanName);
}

postProcessorAfterInitialization方法具体实现

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
    System.out.println("初始化后");
    if ("userService".equals(beanName)) {
        Object proxyInstance = Proxy.newProxyInstance(ZhouyuBeanPostProcessor.class.getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("代理逻辑"); // aop找切点pointCut:代理逻辑定义在哪些类上
                return method.invoke(bean,args);
            }
        });

        // 直接返回代理对象
        return proxyInstance;
    }

    // 返回原始对象
    return bean;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值