设计模式课程 设计模式精讲 16-5 代理模式源码解析
Posted 1446358788-qq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式课程 设计模式精讲 16-5 代理模式源码解析相关的知识,希望对你有一定的参考价值。
1 源码解析
1.1 源码解析1(jdk中的应用)
1.2 源码解析2(spring中的应用)
1.3 源码解析3(mybaties中的应用)
1 源码解析
1.1 源码解析1(jdk中的应用)
java.lang.reflect.Proxy
public class Proxy implements java.io.Serializable protected Proxy(InvocationHandler h) doNewInstanceCheck(); this.h = h;
//此处产生一个新的实例(目标对象) public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException if (h == null) throw new NullPointerException(); final Class<?>[] intfs = interfaces.clone(); final SecurityManager sm = System.getSecurityManager(); if (sm != null) checkProxyAccess(Reflection.getCallerClass(), loader, intfs); /* * Look up or generate the designated proxy class. */ Class<?> cl = getProxyClass0(loader, intfs); /* * Invoke its constructor with the designated invocation handler. */ try final Constructor<?> cons = cl.getConstructor(constructorParams); final InvocationHandler ih = h; if (sm != null && ProxyAccessHelper.needsNewInstanceCheck(cl)) // create proxy instance with doPrivilege as the proxy class may // implement non-public interfaces that requires a special permission return AccessController.doPrivileged(new PrivilegedAction<Object>() public Object run() return newInstance(cons, ih); ); else return newInstance(cons, ih); catch (NoSuchMethodException e) throw new InternalError(e.toString());
1.2 源码解析2(spring中的应用)
ProxyFactoryBean
public class ProxyFactoryBean extends ProxyCreatorSupport implements FactoryBean<Object>, BeanClassLoaderAware, BeanFactoryAware
//如果不声明,默认单例对象,注解声明多例,则声明多例对象
public Object getObject() throws BeansException this.initializeAdvisorChain(); if (this.isSingleton()) return this.getSingletonInstance(); else if (this.targetName == null) this.logger.warn("Using non-singleton proxies with singleton targets is often undesirable. Enable prototype proxies by setting the ‘targetName‘ property."); return this.newPrototypeInstance();
1.3 源码解析3(mybaties中的应用)
MapperProxyFactory
public class MapperProxyFactory<T> public T newInstance(SqlSession sqlSession) MapperProxy<T> mapperProxy = new MapperProxy(sqlSession, this.mapperInterface, this.methodCache); return this.newInstance(mapperProxy);
以上是关于设计模式课程 设计模式精讲 16-5 代理模式源码解析的主要内容,如果未能解决你的问题,请参考以下文章