您好,登錄后才能下訂單哦!
本篇文章為大家展示了SpringFramework中DefaultAopProxyFactory的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Springaop中的DefaultAopProxyFactory,先上一張圖,如下圖1
圖1
Springaop中使用DefaultAopProxyFactory來創建代理,它決定了何時使用JDK還是Cglib代理,實現如下List-1所示:
List-1
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); } } /** * Determine whether the supplied {@link AdvisedSupport} has only the * {@link org.springframework.aop.SpringProxy} interface specified * (or no proxy interfaces specified at all). */ private boolean hasNoUserSuppliedProxyInterfaces(AdvisedSupport config) { Class<?>[] ifcs = config.getProxiedInterfaces(); return (ifcs.length == 0 || (ifcs.length == 1 && SpringProxy.class.isAssignableFrom(ifcs[0]))); } }
List-1中,目標對象擁有接口實現且沒設置proxyTargetClass=true,則使用JDK代理,此外如果目標對象是個接口或者是代理類,則使用JDK代理,
否則使用Cglib,有些人說設置了ProxyTargetClass=true會使用JDK代理,正常情況下是正確的,不過從源碼來看不一定——即使設置了ProxyTargetClass=true,如果目標對象類是個接口或者是代理類,則使用使用的是JDK代理。
上述內容就是SpringFramework中DefaultAopProxyFactory的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。