小编给大家分享一下java反射应用的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
反射使用JAVA反应进行两个vo有相同字段名字进行子转换:
@Test
public void doTransTest() {
A a= new A();
A.setC(111L);
B b= new B();
doTrans(a, b);
}
/**
*@param sour 来源vo
*@param dest 待转换vo
*/
public void doTrans(Object sour, Object dest) {
if (sour == null) {
dest = null;
return;
}
//反射原理应用
Class<?> sourceClass = sour.getClass();
Class<?> destClass = dest.getClass();
for (Field field : sourceClass.getDeclaredFields()) {
String fieldName = field.getName();
Object value;
if (fieldName.equals("serialVersionUID")) {
continue;
}
try {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, sourceClass);
value = propertyDescriptor.getReadMethod().invoke(sour);
} catch (Exception e) {
//log
continue;
}
if (value == null) {
continue;
}
try {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, destClass);
propertyDescriptor.getWriteMethod().invoke(dest, value);
} catch (Exception e) {
//log
continue;
}
}
}
SpringIOC反射的应用:
/**
* springIOC和反射test
*
* @throws Exception
*/
@Test
public void reflexTest() throws Exception {
/**
* 第一步,springIOC解析如下bean
* <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>
*/
//解析bean字符串xxxxx
String beanId = "cartBean";
String beanClass = "com.mmall.pojo.Cart";
Class<?> cls = Class.forName(beanClass);
Object object = cls.newInstance();
//模拟spring容器
Map container = Maps.newHashMap();
//bean注入spring容器,实例化成功
container.put(beanId, object);
/**
* 第二步:模拟ref注入
* <bean id="cartBean" class="com.mmall.pojo.Cart"></bean>
* <property name="user" ref="userBean"></property>
* <bean>
*/
//初始化refBean(userBean)
String beanIdUser = "cartBean";
String beanClassUser = "com.mmall.pojo.User";
Class<?> clsUser = Class.forName(beanClassUser);
Object objectUser = clsUser.newInstance();
//并注入spring容器
container.put(beanIdUser,objectUser);
//得到cartBean的setUser方法
String setUserName = "setUser";
Object paramBean = container.get(beanIdUser);
//cls是cart对象
Method setter = cls.getMethod(setUserName, objectUser.getClass());
//注入set方法
setter.invoke(object, paramBean);
}
以上是java反射应用的案例的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。