public class ProxyFactory<T> extends Object
BeanInstance
. All proxies implement the Proxy
interface.Modifier and Type | Field and Description |
---|---|
static String |
CONSTRUCTED_FLAG_NAME |
protected static BytecodeMethodResolver |
DEFAULT_METHOD_RESOLVER |
static String |
DEFAULT_PROXY_PACKAGE |
protected static String |
INIT_METHOD_NAME |
protected static String |
LBEAN_IDENTIFIER |
protected static String |
LJAVA_LANG_BYTE |
protected static String |
LJAVA_LANG_CLASS |
protected static String |
LJAVA_LANG_OBJECT |
protected static String |
LJAVA_LANG_REFLECT_METHOD |
protected static String |
LJAVA_LANG_STRING |
protected static String |
LJAVA_LANG_THREAD_LOCAL |
protected static String |
METHOD_HANDLER_FIELD_NAME |
static String |
PROXY_SUFFIX |
Constructor and Description |
---|
ProxyFactory(String contextId,
Class<?> proxiedBeanType,
Set<? extends Type> typeClosure,
javax.enterprise.inject.spi.Bean<?> bean)
created a new proxy factory from a bean instance.
|
ProxyFactory(String contextId,
Class<?> proxiedBeanType,
Set<? extends Type> typeClosure,
javax.enterprise.inject.spi.Bean<?> bean,
boolean forceSuperClass) |
ProxyFactory(String contextId,
Class<?> proxiedBeanType,
Set<? extends Type> typeClosure,
String proxyName,
javax.enterprise.inject.spi.Bean<?> bean)
Creates a new proxy factory when the name of the proxy class is already
known, such as during de-serialization
|
ProxyFactory(String contextId,
Class<?> proxiedBeanType,
Set<? extends Type> typeClosure,
String proxyName,
javax.enterprise.inject.spi.Bean<?> bean,
boolean forceSuperClass) |
Modifier and Type | Method and Description |
---|---|
protected void |
addAdditionalInterfaces(Set<Class<?>> interfaces)
Sub classes may override to specify additional interfaces the proxy should
implement
|
protected void |
addConstructedGuardToMethodBody(org.jboss.classfilewriter.ClassMethod classMethod)
Adds the following code to a delegating method:
if(!this.constructed) return super.thisMethod()
This means that the proxy will not start to delegate to the underlying
bean instance until after the constructor has finished. |
protected void |
addConstructors(org.jboss.classfilewriter.ClassFile proxyClassType,
List<DeferredBytecode> initialValueBytecode)
Adds a constructor for the proxy for each constructor declared by the base
bean type.
|
protected void |
addFields(org.jboss.classfilewriter.ClassFile proxyClassType,
List<DeferredBytecode> initialValueBytecode) |
void |
addInterface(Class<?> newInterface)
Adds an additional interface that the proxy should implement.
|
void |
addInterfacesFromTypeClosure(Set<? extends Type> typeClosure,
Class<?> proxiedBeanType) |
protected void |
addMethods(org.jboss.classfilewriter.ClassFile proxyClassType,
org.jboss.classfilewriter.ClassMethod staticConstructor) |
protected void |
addMethodsFromClass(org.jboss.classfilewriter.ClassFile proxyClassType,
org.jboss.classfilewriter.ClassMethod staticConstructor) |
protected void |
addSerializationSupport(org.jboss.classfilewriter.ClassFile proxyClassType)
Adds special serialization code.
|
protected void |
addSpecialMethods(org.jboss.classfilewriter.ClassFile proxyClassType,
org.jboss.classfilewriter.ClassMethod staticConstructor)
Adds methods requiring special implementations rather than just
delegation.
|
T |
create(BeanInstance beanInstance)
Method to create a new proxy that wraps the bean instance.
|
protected void |
createForwardingMethodBody(org.jboss.classfilewriter.ClassMethod classMethod,
MethodInformation method,
org.jboss.classfilewriter.ClassMethod staticConstructor) |
protected void |
createInterceptorBody(org.jboss.classfilewriter.ClassMethod classMethod,
MethodInformation method,
org.jboss.classfilewriter.ClassMethod staticConstructor)
Creates the given method on the proxy class where the implementation
forwards the call directly to the method handler.
|
protected void |
createSpecialMethodBody(org.jboss.classfilewriter.ClassMethod proxyClassType,
MethodInformation method,
org.jboss.classfilewriter.ClassMethod staticConstructor) |
protected void |
generateEqualsMethod(org.jboss.classfilewriter.ClassFile proxyClassType)
Generate the body of the proxies equals method.
|
protected void |
generateHashCodeMethod(org.jboss.classfilewriter.ClassFile proxyClassType)
Generate the body of the proxies hashCode method.
|
Set<Class<?>> |
getAdditionalInterfaces() |
protected String |
getBaseProxyName()
Returns the package and base name for the proxy class.
|
javax.enterprise.inject.spi.Bean<?> |
getBean() |
Class<?> |
getBeanType() |
protected Class<T> |
getCachedProxyClass(String proxyClassName) |
String |
getContextId() |
Class<T> |
getProxyClass()
Produces or returns the existing proxy class.
|
protected String |
getProxyNameSuffix()
Returns a suffix to append to the name of the proxy class.
|
protected static void |
invokeMethodHandler(org.jboss.classfilewriter.ClassMethod classMethod,
MethodInformation method,
boolean addReturnInstruction,
BytecodeMethodResolver bytecodeMethodResolver,
org.jboss.classfilewriter.ClassMethod staticConstructor)
calls methodHandler.invoke for a given method
|
protected boolean |
isCreatingProxy() |
static boolean |
isProxy(Object proxySuspect)
Convenience method to determine if an object is a proxy generated by this
factory or any derived factory.
|
protected boolean |
isUsingUnsafeInstantiators() |
static ClassLoader |
resolveClassLoaderForBeanProxy(String contextId,
Class<?> proxiedType,
Proxies.TypeInfo typeInfo)
Figures out the correct class loader to use for a proxy for a given bean
|
static <T> void |
setBeanInstance(String contextId,
T proxy,
BeanInstance beanInstance,
javax.enterprise.inject.spi.Bean<?> bean)
Convenience method to set the underlying bean instance for a proxy.
|
public static final String PROXY_SUFFIX
public static final String DEFAULT_PROXY_PACKAGE
public static final String CONSTRUCTED_FLAG_NAME
protected static final BytecodeMethodResolver DEFAULT_METHOD_RESOLVER
protected static final String LJAVA_LANG_REFLECT_METHOD
protected static final String LJAVA_LANG_BYTE
protected static final String LJAVA_LANG_CLASS
protected static final String LJAVA_LANG_OBJECT
protected static final String LBEAN_IDENTIFIER
protected static final String LJAVA_LANG_STRING
protected static final String LJAVA_LANG_THREAD_LOCAL
protected static final String INIT_METHOD_NAME
protected static final String METHOD_HANDLER_FIELD_NAME
public ProxyFactory(String contextId, Class<?> proxiedBeanType, Set<? extends Type> typeClosure, javax.enterprise.inject.spi.Bean<?> bean)
public ProxyFactory(String contextId, Class<?> proxiedBeanType, Set<? extends Type> typeClosure, javax.enterprise.inject.spi.Bean<?> bean, boolean forceSuperClass)
public ProxyFactory(String contextId, Class<?> proxiedBeanType, Set<? extends Type> typeClosure, String proxyName, javax.enterprise.inject.spi.Bean<?> bean)
proxiedBeanType
- the super-class for this proxy classtypeClosure
- the bean types of the beanproxyName
- the name of the proxy classpublic void addInterfacesFromTypeClosure(Set<? extends Type> typeClosure, Class<?> proxiedBeanType)
protected boolean isCreatingProxy()
public void addInterface(Class<?> newInterface)
newInterface
- an interfacepublic T create(BeanInstance beanInstance)
beanInstance
- the bean instancepublic Class<T> getProxyClass()
protected String getBaseProxyName()
public static boolean isProxy(Object proxySuspect)
proxySuspect
- the object suspected of being a proxypublic static <T> void setBeanInstance(String contextId, T proxy, BeanInstance beanInstance, javax.enterprise.inject.spi.Bean<?> bean)
proxy
- the proxy instancebeanInstance
- the instance of the beanprotected String getProxyNameSuffix()
protected void addAdditionalInterfaces(Set<Class<?>> interfaces)
protected void addConstructors(org.jboss.classfilewriter.ClassFile proxyClassType, List<DeferredBytecode> initialValueBytecode)
proxyClassType
- the Javassist class for the proxyinitialValueBytecode
- protected void addFields(org.jboss.classfilewriter.ClassFile proxyClassType, List<DeferredBytecode> initialValueBytecode)
protected void addMethods(org.jboss.classfilewriter.ClassFile proxyClassType, org.jboss.classfilewriter.ClassMethod staticConstructor)
protected void addSerializationSupport(org.jboss.classfilewriter.ClassFile proxyClassType)
proxyClassType
- the Javassist class for the proxy classprotected void addMethodsFromClass(org.jboss.classfilewriter.ClassFile proxyClassType, org.jboss.classfilewriter.ClassMethod staticConstructor)
protected void generateHashCodeMethod(org.jboss.classfilewriter.ClassFile proxyClassType)
protected void generateEqualsMethod(org.jboss.classfilewriter.ClassFile proxyClassType)
proxyClassType
- The class fileprotected void createSpecialMethodBody(org.jboss.classfilewriter.ClassMethod proxyClassType, MethodInformation method, org.jboss.classfilewriter.ClassMethod staticConstructor)
protected void addConstructedGuardToMethodBody(org.jboss.classfilewriter.ClassMethod classMethod)
if(!this.constructed) return super.thisMethod()
This means that the proxy will not start to delegate to the underlying
bean instance until after the constructor has finished.protected void createForwardingMethodBody(org.jboss.classfilewriter.ClassMethod classMethod, MethodInformation method, org.jboss.classfilewriter.ClassMethod staticConstructor)
protected void createInterceptorBody(org.jboss.classfilewriter.ClassMethod classMethod, MethodInformation method, org.jboss.classfilewriter.ClassMethod staticConstructor)
classMethod
- the class methodmethod
- any JLR methodprotected static void invokeMethodHandler(org.jboss.classfilewriter.ClassMethod classMethod, MethodInformation method, boolean addReturnInstruction, BytecodeMethodResolver bytecodeMethodResolver, org.jboss.classfilewriter.ClassMethod staticConstructor)
method
- The method informationaddReturnInstruction
- set to true you want to return the result of
the method invocationbytecodeMethodResolver
- The resolver that returns the method to invokeprotected void addSpecialMethods(org.jboss.classfilewriter.ClassFile proxyClassType, org.jboss.classfilewriter.ClassMethod staticConstructor)
proxyClassType
- the Javassist class description for the proxy typepublic Class<?> getBeanType()
public javax.enterprise.inject.spi.Bean<?> getBean()
public String getContextId()
public static ClassLoader resolveClassLoaderForBeanProxy(String contextId, Class<?> proxiedType, Proxies.TypeInfo typeInfo)
protected boolean isUsingUnsafeInstantiators()
Copyright © 2016. All rights reserved.