Package org.aoju.bus.proxy.factory
Class AbstractFactory
java.lang.Object
org.aoju.bus.proxy.Factory
org.aoju.bus.proxy.factory.AbstractFactory
- Direct Known Subclasses:
CglibFactory,JavassistFactory
超类为
Factory,它支持子类化而不仅仅是实现接口- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanstatic AbstractFactorycreate()根据用户引入Cglib与否创建代理工厂static <T> TcreateProxy(T target, Class<? extends Aspectj> aspectClass) 根据用户引入Cglib与否自动创建代理对象static <T> TcreateProxy(T target, Aspectj aspectj) 根据用户引入Cglib与否自动创建代理对象static ClassgetSuperclass(Class[] proxyClasses) static <T> TnewProxyInstance(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> TnewProxyInstance(InvocationHandler invocationHandler, Class<?>... interfaces) 创建动态代理对象static <T> T使用切面代理对象abstract <T> T创建代理protected static Class[]toInterfaces(Class[] proxyClasses) Methods inherited from class org.aoju.bus.proxy.Factory
createDelegatorProxy, createDelegatorProxy, createInterceptorProxy, createInterceptorProxy, createInvokerProxy, createInvokerProxy
-
Constructor Details
-
AbstractFactory
public AbstractFactory()
-
-
Method Details
-
toInterfaces
-
getSuperclass
-
createProxy
根据用户引入Cglib与否自动创建代理对象- Type Parameters:
T- 切面对象类型- Parameters:
target- 目标对象aspectClass- 切面对象类- Returns:
- 代理对象
-
createProxy
根据用户引入Cglib与否自动创建代理对象- Type Parameters:
T- 切面对象类型- Parameters:
target- 被代理对象aspectj- 切面实现- Returns:
- 代理对象
-
create
根据用户引入Cglib与否创建代理工厂- Returns:
- 代理工厂
-
proxy
使用切面代理对象- Type Parameters:
T- 切面对象类型- Parameters:
target- 目标对象aspectClass- 切面对象类- Returns:
- 代理对象
-
newProxyInstance
public 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[])方法- Type Parameters:
T- 被代理对象类型- Parameters:
classloader- 被代理类对应的ClassLoaderinvocationHandler-InvocationHandler,被代理类通过实现此接口提供动态代理功能interfaces- 代理类中需要实现的被代理类的接口方法- Returns:
- 代理类
-
newProxyInstance
创建动态代理对象- Type Parameters:
T- 被代理对象类型- Parameters:
invocationHandler-InvocationHandler,被代理类通过实现此接口提供动态代理功能interfaces- 代理类中需要实现的被代理类的接口方法- Returns:
- 代理类
-
canProxy
-
proxy
创建代理- Type Parameters:
T- 代理对象类型- Parameters:
target- 被代理对象aspectj- 切面实现- Returns:
- 代理对象
-