public abstract class AbstractFactory extends Factory
Factory,它支持子类化而不仅仅是实现接口| Constructor and Description |
|---|
AbstractFactory() |
| Modifier and Type | Method and Description |
|---|---|
boolean |
canProxy(Class[] proxyClasses) |
static AbstractFactory |
create()
根据用户引入Cglib与否创建代理工厂
|
static <T> T |
createProxy(T target,
Aspectj aspectj)
根据用户引入Cglib与否自动创建代理对象
|
static <T> T |
createProxy(T target,
Class<? extends Aspectj> aspectClass)
根据用户引入Cglib与否自动创建代理对象
|
static Class |
getSuperclass(Class[] proxyClasses) |
static <T> T |
newProxyInstance(ClassLoader classloader,
InvocationHandler invocationHandler,
Class<?>... interfaces)
创建动态代理对象
动态代理对象的创建原理是:
假设创建的代理对象名为 $Proxy0
1、根据传入的interfaces动态生成一个类,实现interfaces中的接口
2、通过传入的classloder将刚生成的类加载到jvm中 即将$Proxy0类load
3、调用$Proxy0的$Proxy0(InvocationHandler)构造函数 创建$Proxy0的对象,并且用interfaces参数遍历其所有接口的方法,这些实现方法的实现本质上是通过反射调用被代理对象的方法
4、将$Proxy0的实例返回给客户端
5、当调用代理类的相应方法时,相当于调用
InvocationHandler.invoke(Object, java.lang.reflect.Method, Object[]) 方法 |
static <T> T |
newProxyInstance(InvocationHandler invocationHandler,
Class<?>... interfaces)
创建动态代理对象
|
abstract <T> T |
proxy(T target,
Aspectj aspectj)
创建代理
|
static <T> T |
proxy(T target,
Class<? extends Aspectj> aspectClass)
使用切面代理对象
|
protected static Class[] |
toInterfaces(Class[] proxyClasses) |
createDelegatorProxy, createDelegatorProxy, createInterceptorProxy, createInterceptorProxy, createInvokerProxy, createInvokerProxypublic static <T> T createProxy(T target,
Class<? extends Aspectj> aspectClass)
T - 切面对象类型target - 目标对象aspectClass - 切面对象类public static <T> T createProxy(T target,
Aspectj aspectj)
T - 切面对象类型target - 被代理对象aspectj - 切面实现public static AbstractFactory create()
public static <T> T proxy(T target,
Class<? extends Aspectj> aspectClass)
T - 切面对象类型target - 目标对象aspectClass - 切面对象类public static <T> T newProxyInstance(ClassLoader classloader, InvocationHandler invocationHandler, Class<?>... interfaces)
InvocationHandler.invoke(Object, java.lang.reflect.Method, Object[]) 方法T - 被代理对象类型classloader - 被代理类对应的ClassLoaderinvocationHandler - InvocationHandler ,被代理类通过实现此接口提供动态代理功能interfaces - 代理类中需要实现的被代理类的接口方法public static <T> T newProxyInstance(InvocationHandler invocationHandler, Class<?>... interfaces)
T - 被代理对象类型invocationHandler - InvocationHandler ,被代理类通过实现此接口提供动态代理功能interfaces - 代理类中需要实现的被代理类的接口方法public abstract <T> T proxy(T target,
Aspectj aspectj)
T - 代理对象类型target - 被代理对象aspectj - 切面实现Copyright © 2019. All rights reserved.