Day65 Spring AOP底层源码解析

2022-07-05  本文已影响0人  小周爱吃瓜
public class DefaultAopProxyFactory implements AopProxyFactory, Serializable {

    @Override
    public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException {
        if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) {
            Class<?> targetClass = config.getTargetClass();
            if (targetClass == null) {
                throw new AopConfigException("TargetSource cannot determine target class: " +
                        "Either an interface or a target is required for proxy creation.");
            }
            if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
                return new JdkDynamicAopProxy(config);
            }
            return new ObjenesisCglibAopProxy(config);
        }
        else {
            return new JdkDynamicAopProxy(config);
        }
    }
    @Bean
    public ProxyFactoryBean createProxyBean(){
        UserService userService = new UserService();
        ProxyFactoryBean proxyFactoryBean = new ProxyFactoryBean();
        proxyFactoryBean.setTarget(userService);
        proxyFactoryBean.setInterceptorNames("testAop");
        return proxyFactoryBean;
    }

可以对批量的Bean进行Aop.

SpringAop是Spring为了方便我们使用Aop所创造的一套机制.


Aspect是编译时就进行了增强,编译时期就会解析@before这些注解,然后加入到被代理类的字节码文件中。

Aspect编译期,Spring运行时期.

--

Aspect,JoinPoint,Advice,Target object,Weaving织入(Spring AOP)

上一篇 下一篇

猜你喜欢

热点阅读