直接上代码:
package org.wwx.cglib.source.test;
import net.sf.cglib.beans.ImmutableBean;
class SampleBean {
private String value;
public SampleBean() {
}
public SampleBean(String value) {
this.value = value;
}
public String geValue() {//注意方法名ge
return this.value;
}
public String getValue() {//正常get方法
return this.value;
}
public String getttttt() {//石乐志的get方法
return this.value;
}
public void setValue(String value) {//正常set方法
this.value = value;
}
public void settValue(String value) {//石乐志set方法
}
public void seValue(String value){//注意方法名se
this.value = value;
}
}
public class CglibTest1 {
public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
// TODO Auto-generated method stub
SampleBean bean = new SampleBean("ww");
SampleBean immutableBean = (SampleBean) ImmutableBean.create(bean); //创建不可变类
System.err.println(immutableBean.getValue());//获得ww
immutableBean.seValue("22");//不报错
//immutableBean.settValue("");//报错
//immutableBean.setValue("");//报错
String s = immutableBean.geValue();
System.err.println(s);//获得22
String str = immutableBean.getValue();
System.err.println(str);//获得ww
String str1 = immutableBean.getttttt();
System.err.println(str1);//获得ww
}
}
看看代理对象在eclipse中是怎么显示的吧
这里我们不难发现代理对象中持有被代理对象的具体类型。
其实我之前,一直好奇这个ImmutableBean这个东东的代码实现方式是怎样的,今天分析了一下,感觉有点收获,
原谅我看不了反编译的文件,搞了好久也不行。只有笨方法,自己试咯。
个人感觉这个ImmutableBean实现的应该很简单,甚至说很僵硬。(个人感觉)
这个不可变的对象其实,只对方法进行了限制,而且很狭隘的限制,只有那个方法名称开头是get或者是set的方法才生效,其余一切方法都不生效。
就这些了。
真的很僵硬。。。。。
github有cglib的源码,maven构建的,github:
https://github.com/wwxname/cglib-resource.git
https://github.com/wwxname/cglib-resource.githttps://github.com/wwxname/cglib-resource.git