User类 Admin类 Member类
package com.tianxiao.whut.domain;
import java.sql.Date;
import java.util.*;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
@XmlType(name = "User")
public abstract class User {
private String userName;
private String userPassword;
private String mobile;
private String email;
private String nickname;
private String region;
private java.util.Date birthday ;
private String telephone;
private String address;
private String postcode;
private String signature;
private String imageUrl;
private int userID;
}
package com.tianxiao.whut.domain;
public class Admin extends User {
@Override
public boolean getIsAdmin() {
// TODO Auto-generated method stub
return true;
}
}
package com.tianxiao.whut.domain;
public class Member extends User {
@Override
public boolean getIsAdmin() {
// TODO Auto-generated method stub
return false;
}
}
WebContent/WEB-INF/reflection.xml 如下
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="admin" class="com.tianxiao.whut.domain.Admin">
</bean>
<bean id="member" class="com.tianxiao.whut.domain.Member">
</bean>
</beans>
实例创建类如下
package com.tianxiao.whut.factory;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.tianxiao.whut.domain.User;
public class InstanceFactory {
private Map<String,String> map;
public InstanceFactory(String fileName) {
String dirPath = System.getProperty("user.dir");;
map= readXml(dirPath+fileName);
}
public Object getBean(String className) {
if(!map.containsKey(className))
return null;
Class c = null;
Object o = null;
try {
c = Class.forName(map.get(className));
o = c.newInstance();
} catch(Exception e) {
e.printStackTrace();
}
return o;
}
public Map<String,String> readXml(String fileName) {
Map map= new HashMap<String,String>();
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
InputStream is=new FileInputStream(fileName);
Document doc=dombuilder.parse(is);
Element root=doc.getDocumentElement();
NodeList dbinfo=root.getElementsByTagName("bean");
if(dbinfo!=null) {
for(int i=0;i<dbinfo.getLength();i++){
Node db=dbinfo.item(i);
NamedNodeMap attr = db.getAttributes();
Node id = attr.getNamedItem("id");
Node classname = attr.getNamedItem("class");
map.put(id.getNodeValue(), classname.getNodeValue());
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
}
Junit测试类如下:
import org.junit.Test;
import com.tianxiao.whut.domain.User;
public class InstanceFactoryTest {
@Test
public void testGetBean() {
//fail("Not yet implemented");
InstanceFactory instanceFactory = new InstanceFactory("/WebContent/WEB-INF/reflection.xml");
User user = (User)instanceFactory.getBean("admin");
System.out.println(user.getIsAdmin());
user = (User)instanceFactory.getBean("member");
System.out.println(user.getIsAdmin());
}
}
这样就可以通过对象名来生成对象了
分享到:
相关推荐
5. **模拟Hibernate**:在模拟Hibernate的场景下,可能需要创建一个简单的持久化框架,该框架利用IoC来管理数据库连接和对象的持久化。这可能涉及到创建一个类似于SessionFactory的类,以及一个用于执行SQL操作的DAO...
在模拟Hibernate时,反射用于在运行时动态地创建对象、调用方法和访问属性,尤其是在处理实体类与数据库表之间的映射时。 2. **Java注解**: 注解是一种元数据,可以为编译器或运行时环境提供有关代码的附加信息。在...
这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...
在这个名为“模拟hibernate注解功能”的项目中,我们将探讨如何利用自定义注解和反射技术来模仿Hibernate的注解功能。 首先,让我们理解一下Hibernate的注解。Hibernate支持JPA(Java Persistence API)标准,其中...
【hibernate注解功能模拟】这一主题主要涵盖了三个核心概念:Hibernate、Annotation(注解)和Reflection(反射)。在Java编程中,这三个概念对于理解对象关系映射(ORM)框架,尤其是Hibernate的工作机制至关重要。...
要使用反射模拟Hibernate的JDBC操作,我们需要遵循以下步骤: 1. **获取Class对象**:首先,我们需要得到目标类的Class对象,这可以通过`Class.forName()`方法实现,传入类的全名(包括包名)。 2. **创建对象**:...
利用反射和注解,可以方便地获取到类和字段的元信息,从而动态生成对应CRUD(Create、Read、Update、Delete)操作的SQL语句。例如,通过注解`@Table`和`@Column`,可以生成`CREATE TABLE`语句;通过类实例的字段,...
本教程详尽地涵盖了Hibernate5框架的各个方面,旨在帮助开发者深入理解和熟练使用这一强大的ORM(对象关系映射)工具。ORM技术的核心思想是将Java对象模型与关系数据库模型进行映射,使得在Java代码中可以直接操作...
于是,使用Facade模式和反射技术模拟Hibernate框架技术演示怎样书封装数据库的操作。 环境:Windows XP Professional, JDK 1.6, Eclipse 3.3 Europa, SQL Server 2000 使用步骤: 1. 下载解压之后,使用Eclipse导入...
4. **事务管理**:模拟Hibernate的事务处理,确保数据操作的原子性和一致性。 5. **缓存机制**:为了提高性能,可能会实现一个简单的缓存层,存放最近访问过的对象或查询结果。 通过这样的实践,学习者可以深入理解...
通过提供一种面向对象的方法来与关系型数据库进行交互,Hibernate允许开发人员使用Java对象来表示数据库记录,并且能够通过简单的API来执行CRUD操作和其他更复杂的数据库任务。 #### Hibernate的HelloWorld示例 ...
总结,Java反射机制提供了强大的元编程能力,允许程序在运行时动态地操作类和对象,但同时也需要开发者关注其潜在的安全性和性能问题。理解和合理运用反射,能够极大地增强代码的灵活性和扩展性。
2. **测试**:在单元测试中,可以通过CGLib生成类的模拟对象(mock object),方便对类的方法进行模拟和测试。 3. **动态数据访问**:例如ORM框架如Hibernate,使用CGLib动态创建数据访问对象(DAO)。 总的来说,...
3. **测试框架**:Mockito 等测试框架利用动态代理模拟真实对象的行为,方便测试。 4. **RPC框架**:如 Dubbo 或 Hessian 在远程服务调用时,可能会使用动态代理来封装网络通信过程。 实现动态代理的方式主要有两种...
4. **代码生成**:利用反射技术可以在运行时动态生成代码,比如在Hibernate框架中用于动态创建SQL语句。 5. **性能监控和分析工具**:通过对运行时的类和方法进行分析,可以监控程序的性能,并对其进行优化。 #### ...
这个“reflection模拟JavaBean.rar”压缩包可能包含了一个示例项目,展示了如何使用反射机制来操作JavaBean对象。JavaBean是Java中的一种特殊类,通常遵循一定的规范,用于封装数据和提供getter与setter方法,以便于...
- 数据库ORM框架:如Hibernate,根据数据库表结构动态生成Java对象。 - 测试工具:JUnit等测试框架使用反射来模拟方法调用或注入依赖。 - 日志和监控:获取类信息,分析运行时行为。 ### 7. 性能与安全性 虽然反射...
2. **ORM(对象关系映射)**: Hibernate框架在某些情况下,如实体类没有实现接口时,也会使用CGLIB来生成代理对象,实现懒加载等特性。 3. **性能优化**: 对于性能敏感的应用,CGLIB可以比Java反射机制提供更快的...
- **高性能的工厂模式实现**:CGLIB可以用于创建高效的单例或者多例工厂,避免了反射带来的性能损失。 了解CGLIB的工作原理和使用方式对于Java开发者来说至关重要,因为它可以帮助优化代码结构,提升程序性能,并...
CGLib在实际开发中有多种应用场景,如AOP(面向切面编程)框架Spring中的动态代理,ORM(对象关系映射)框架Hibernate的懒加载机制,以及测试框架Mockito的模拟对象等。通过使用CGLib,开发者可以更加灵活地处理复杂...