欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cglib中ImmutableBean问题分析

程序员文章站 2022-06-18 10:58:44
...

直接上代码:

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中是怎么显示的吧

cglib中ImmutableBean问题分析

这里我们不难发现代理对象中持有被代理对象的具体类型。

其实我之前,一直好奇这个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
相关标签: cglib