前段时间使用spring做数据映射,奈何公司就是不喜欢用这些框架,总说不适用。。。
我就崩溃,java也就这么几个经典的框架,别人都适合怎就你不适合,--冷静--
之后因为解析xml写得太烂了,就借鉴spring的反射,写了个反射的工具类,用做xml反射到实体bean属性。
代码放出来,不是想得瑟,因为写的也没什么。而且因为没见过spring resource,更是写得不知好坏,想哪写哪
package com.logi.lpromis.mapping.xml;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
public class XMLPropertyReflection
{
private static final Logger logger = Logger.getLogger(XMLPropertyReflection.class);
/**
* 获取类属性值
* @param bean 类
* @param filename 类属性名
* @return 类属性
* @throws Exception
*/
public static Object getProperty(Object bean,String filename) throws Exception
{
Class<? extends Object> beanClass = bean.getClass();
Field field = beanClass.getDeclaredField(filename);
field.setAccessible(true);
Object property = field.get(bean);//获得属性
return property;
}
/**
* 设置类属性
* @param bean 类
* @param filename 类名
* @param filevalue 新类属性值
* @throws Exception
*/
// public static void setProperty(Object bean,String filename,String filevalue) throws Exception
// {
// try{
// Class<? extends Object> beanClass = bean.getClass();
// Field field = beanClass.getDeclaredField(filename);
// field.setAccessible(true);
// Object value = ConvertHandler(field.getType(),filevalue);//转换属性
// field.set(bean, value);//设置属性
// }
// catch (Exception e)
// {
// if(e instanceof NoSuchFieldException)
// {
// logger.error("类中缺少类型"+filename);
// logger.error(e);
// }
// else
// throw e;
// }
// }
/**
* 转换类属性值
* @param type 类中属性类型
* @param filevalue 类属性新值String类型
* @return 类属性新值
* @throws Exception
*/
public static Object ConvertHandler(Class<?> type,String filevalue) throws Exception
{
String typename = type.getName();
if(filevalue.getClass().getName().equals(typename))
return filevalue;//与所给类型值相同
else if("Boolean".equalsIgnoreCase(typename) || "java.lang.Boolean".equals(typename))
{
//boolean型
if(filevalue.equalsIgnoreCase("true") || filevalue.equals("1"))
return new Boolean(true);
else
return new Boolean(false);
}
else if("int".equalsIgnoreCase(typename) || "Integer".equals(typename) || "java.lang.Integer".equals(typename))
return new Integer(filevalue);//int 型
else if("String".equalsIgnoreCase(typename) || "java.lang.String".equals(typename))
return new String(filevalue);//String 型
else
{
throw new Exception("xml转换类型不支持"+typename+",需要扩展XMLPropertyReflection的ConvertHandler");//不支持所给类型,需要修改XMLPropertyReflection的ConvertHandler
}
}
/**
* 设置类属性
* @param bean 类
* @param filename 类名
* @param filevalue 新类属性值
* @throws Exception
*/
public static void setProperty(Object bean,String fileName,String fileValue) throws Exception
{
try
{
Class<? extends Object> beanClass = bean.getClass();
//查找set方法
String fieldName = fileName.substring(0,1).toUpperCase()+fileName.substring(1);
String setFieldName = "set"+fieldName;//获取set方法名
String getFieldName = "get"+fieldName;//获得get方法名
Method getMethod = beanClass.getMethod(getFieldName);//获取获取方法
Class<?> propertyType = getMethod.getReturnType();//获取属性类型
Method setMethod = beanClass.getMethod(setFieldName,new Class[]{propertyType});
Object value = ConvertHandler(propertyType,fileValue);//获得新值value
setMethod.invoke(bean, new Object[]{value});
}
catch (Exception e)
{
if(e instanceof NoSuchMethodException)
{
logger.error("类中缺少类型" + fileName, e);
}
else
throw e;
}
}
public static void setProperty(Object object,Element ele) throws Exception
{
NamedNodeMap attributeMap = ele.getAttributes();
for (int i = 0; i < attributeMap.getLength(); i++)
{
Node cataNode = attributeMap.item(i);
XMLPropertyReflection.setProperty(object, cataNode.getNodeName(), cataNode.getNodeValue());
}
}
}
写得不好,请多指教。其中getDeclaredField方法无法拿到父类属性,所以只能用getmethod方法,去拿公共方法
分享到:
相关推荐
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性在处理现实业务问题时尤其有用,例如实现插件化、元编程、动态代理等...
### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...
- class:用于指定Bean所对应的完整类名,Spring通过反射来创建该类的实例。 3. Bean的作用域: - singleton:默认的作用域,表示容器中只有一个Bean实例。 - prototype:每次请求都创建一个新的Bean实例。 - ...
在实例化阶段,Spring容器利用反射机制根据Bean的定义信息创建对象实例。这一过程通常涉及构造器的调用,但也可以通过工厂方法或静态工厂方法实现Bean的实例化。 2. 属性赋值(Population) 属性赋值阶段,Spring...
这在配置驱动的设计模式中非常常见,比如Spring框架就是通过这种方式加载配置文件,初始化bean并管理其生命周期。 以下是一个简单的示例,展示了如何使用Java反射解析XML: ```java import java.io.File; import ...
- Spring框架使用Java的反射机制来实现依赖注入,具体是通过构造器注入和属性注入(基于属性和方法)的方式。 Bean的实例化: - 在Spring框架中,Bean的实例化可以通过三种方式完成:构造方法实例化、静态工厂实例...
例如,如果 BeanDefinition 对象定义了一个 JavaBean,Spring 框架会使用 Java 反射机制创建一个新的 JavaBean 实例。 5. 到达填充属性,对属性赋值 在实例化完成后,Spring 框架会对 Bean 对象进行属性赋值。在这...
Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包,提供了Class、Constructor、Method和Field等类,用于获取类的信息...
通过BeanWrapper,开发者可以方便地操作Bean,无论是简单的属性赋值,还是复杂的嵌套属性处理,甚至是方法调用,都能得以实现。 例如,在给定的代码示例中,我们创建了一个`Company`和一个`Employee`对象,然后使用...
Spring容器启动时会根据配置文件来创建Bean实例,并且利用反射机制调用相应的setter方法为属性赋值。这种方式降低了组件之间的耦合度,因为对象不再需要自己查找或创建与其相互协作的对象,而是通过容器来注入它们。...
Spring支持泛型Bean,可以通过反射机制获取泛型的实际类型,方便管理和操作。 14. **Spring JUnit单元测试**: 结合Spring和JUnit进行单元测试,可以通过`@ContextConfiguration`加载配置,`@Autowired`注入依赖...
Spring是一个由Rod Johnson创建的轻量级Java开发框架,它为Java应用程序提供了全面的基础架构支持。Spring的核心目标在于简化企业级应用的开发过程,降低开发难度的同时提高了开发效率。Spring框架不仅在Java社区中...
1.Spring核心讲解与内容详述.mp4;`-{0B:r2E;]$u+m 2.Spring源码环境搭建与执行流程解析.mp4/j1};W;T$w4J8L2C5B.s 3.Spring核心组件装配流程解析.mp4)v!aq1n6}(D*K'b+V[1a ...15.Spring对象属性赋值与作用域源码解
4. **org.springframework.core-3.0.5.RELEASE.jar**:这是Spring的核心库,包含了基本的类型转换、反射、集合操作等基础工具类,是Spring框架的基石。 5. **org.springframework.aop-3.0.5.RELEASE.jar**:这个...
IoC 容器通过读取配置文件,解析XML,然后使用Java的反射机制实例化配置的bean,并根据配置完成对象的初始化和依赖注入。在处理引用类型的成员变量时,可以通过`ref`属性指定其依赖的对象,实现对象间的关联。 ...
Spring通过反射和元数据来自动装配Bean的依赖,使得代码更加松耦合,易于测试和维护。 综上所述,“StudyIdeaProject”项目将带你全面探索Spring框架的内在机制,从扫描、解析到Bean的创建和管理,再到AOP和依赖...
5. **spring-expression.jar**(通常与spring-context一起打包):提供了强大的表达式语言(SpEL),用于在运行时查询和操作对象图,常用于Bean属性的动态赋值和AOP的切入点表达式。 6. **spring-aop.jar**:提供...
Spring框架作为一个开源的轻量级框架,主要应用于Java企业级应用的开发。随着版本的迭代,Spring框架的功能不断丰富和完善,成为Java领域内最受欢迎的企业级开发框架之一。 #### Spring的核心组成 Spring的核心...
例如,Spring容器实例化一个person对象和一个student对象,通过Java的反射机制调用setter方法为属性赋值,从而完成依赖关系的注入。 注解是Java 5.0引入的特性,它提供了一种新的方式来声明元数据。在Spring中,...
1. **Java反射**:Java反射是Java语言提供的一种机制,允许程序在运行时检查类的内部结构,如字段、方法、构造器等,并能动态调用方法和修改属性。在实际开发中,反射主要用于框架设计、测试工具、序列化/反序列化...