功能优点:
Class织入功能是可以对已编译的类中的字段或方法进行二次修改,从而可以方便的对产品进行二次开发及功能扩展
缺点:
1.由于更新了编译的class,在调试时无法跟踪到正确的行号,也不能正确的指定源码,所以调试起来比较困难
2.在对原class升级的时候也需要检查织入类,所以在升级产品时会增加部分工作量
所以应尽量少的使用该功能做二次开发
功能组成元素:
目标类
被织入的目标类,可以是任何类型的java类
存根类
使用@WeaveStub注解标识,存根类用来罗列目标类的成员,从而方便调用目标类的字段或方法,在实际运作时它并不参与,只是为了方便调用目标类成员而存在(例如:可以通过存根类调用目标的私有成员)
织入类
使用@Weaver注解标识,并由@Weaver注解的value值指定目标类,织入类中的成员会替换目标类中的成员(字段、方法),在织入类中可以访问目标类的原有方法或字段
织入类可以继承目标类或存根类,通过访问父类的成员来访问目标类的原方法,如果要访问的目标类成员是私有成员,则只能通过集成存根类来访问(需要在存根类中将成员标记为public或protected)
在织入类中可以通过super来访问目标类的方法,如果想要调用目标类的父类方法可以给方法添加@SuperInvoke注解,来标识此方法中的super关键字为目标类的父类
在织入类中可以直接访问目标类的字段,如果目标类的字段被织入则会得到织入后的值,无法得到被织入前的值,这是因为织入行为是发生在类加载器载入类字节码之前
使用示例:
目标类:
存根类:
织入类:
测试调用类:
访问test输出结果:
|
所有评论仅代表网友意见