`
zhangyu84849467
  • 浏览: 15425 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 通过ReflectionFactory 创建序列化的实例(原创)

 
阅读更多

 

import java.io.Serializable;

public class Foo implements Serializable {
	private String str;
	public Foo(String str) {
		this.str = str;
	}
}

 Foo是一个可以序列化的实体类

public class FooTest {
	private static final ReflectionFactory REFLECTION_FACTORY = ReflectionFactory.getReflectionFactory();
	
	public static void main(String[] args)  {
		Class<Foo> clazz = Foo.class;
		try {
			Foo foo = newSerializableInstance(clazz);
		} catch (InvocationTargetException e) {
			
		}
	}
	
	public static <T> T newSerializableInstance(Class<T> clazz) throws InvocationTargetException {
		Class<?> cl = clazz;
		while(Serializable.class.isAssignableFrom(cl)) {
			if ((cl = cl.getSuperclass()) == null) {
				return null;
			}
		}
		try {
			Constructor<?> cons = cl.getDeclaredConstructor((Class<?>[]) null);
			cons = REFLECTION_FACTORY.newConstructorForSerialization(clazz, cons);
			cons.setAccessible(true);
			return (T)cons.newInstance();
		} catch (NoSuchMethodException e) {
			return null;
		} catch (InstantiationException e) {
			return null;
		} catch (IllegalAccessException e) {
			return null;
		} catch (IllegalArgumentException e) {
			return null;
		}
	}
}

 有兴趣的可以参看JDK 

 

 

分享到:
评论

相关推荐

    java反序列化漏洞-金蛇剑之hibernate(上).pdf

    在某些情况下,如果子类的构造函数不是公开的,可以通过`ReflectionFactory`来创建实例。 这个过程的关键在于,攻击者需要找到合适的入口点,通过反序列化来触发恶意行为。在本例中,`BasicGetter`的构造函数接收三...

    利用java反射原理实现工厂模式

    通过反射,我们可以将实例化过程延迟到运行时,只需知道类的全限定名(包括包名和类名)即可。这样,无需修改工厂类,就可以添加新的产品类型,降低了系统的耦合度。 具体步骤如下: 1. **获取Class对象**:首先,...

    JavaReflection

    Java反射 如何使用该应用程序: 提供软件包和要从中创建新对象的类的名称。 可以使用get方法检索的所有字段都将显示在表格中。 如果该字段具有设置方法,则可以对其进行编辑。 所有方法均在下拉框中列出。

    详解Java中Method的Invoke方法

    MethodAccessor 对象是由 ReflectionFactory 生成的,ReflectionFactory 对象在 Method 类中是静态的 final 的,由 native 方法实例化。 ReflectionFactory 生成 MethodAccessor 对象的过程是,如果 noInflation ...

    mybatis-反射包注释.7z

    在Executor的实现中,反射用于实例化StatementHandler、ParameterHandler和ResultSetHandler等关键组件。 6. **TypeHandler**:TypeHandler接口处理Java类型与数据库类型之间的转换,反射在这里用于读取和设置Java...

    Java方法反射实现原理详解

    在acquireMethodAccessor方法中,会通过 ReflectionFactory 类的newMethodAccessor创建一个实现了MethodAccessor接口的对象。 在 Java 反射机制中,还有一个重要的数据结构ReflectionData,用来缓存从 JVM 中读取类...

Global site tag (gtag.js) - Google Analytics