cglib中ImmutableBean问题分析

直接上代码:

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

猜你喜欢

转载自blog.csdn.net/qq_32771571/article/details/79799135
今日推荐