cglib是动态代理的一种,该类型代理是通过产生class的方式来产生代理类,相对于jdk动态代理,该类型代理可以代理没实现接口的类。CGLIB代理底层通过重新生成每个类的方法,final、private、static方法则不会创建新的方法。 java modifier作为反射的一部分,可以用来标识每个类以及类方法的属性,其值如下所示:
public static final int | ABSTRACT 抽象方法 | 1024 |
public static final int | FINAL final方法 | 16 |
public static final int | INTERFACE | 512 |
public static final int | NATIVE | 256 |
public static final int | PRIVATE | 2 |
public static final int | PROTECTED | 4 |
public static final int | PUBLIC | 1 |
public static final int | STATIC | 8 |
public static final int | STRICT | 2048 |
public static final int | SYNCHRONIZED | 32 |
public static final int | TRANSIENT | 128 |
public static final int | VOLATILE | 64 |
cglib代码包结构
编辑
-
core (核心代码)
-
EmitUtils
-
ReflectUtils
-
KeyFactory
-
ClassEmitter/CodeEmitter
-
NamingPolicy/DefaultNamingPolicy
-
GeneratorStrategy/DefaultGeneratorStrategy
-
DebuggingClassWriter
-
ClassGenerator/AbstractClassGenerator
-
-
beans (bean操作类)
-
BeanCopier
-
BulkBean
-
BeanMap
-
ImmutableBean
-
BeanGenerator
-
-
reflect
-
FastClass
-
-
proxy
-
MethodInterceptor , Dispatcher, LazyLoader , ProxyRefDispatcher , NoOp , FixedValue , InvocationHandler(提供和jdk proxy的功能)
-
Enhancer
-
CallbackGenerator
-
Callback
-
CallbackFilter
-
-
util
-
StringSwitcher
-
ParallelSorter
-
-
transform