Java反射应用案例

场景:在购物网站中,有一级分类实体、二级分类实体、商品实体,对三个实体映射到数据库中的操作有:删除一条记            录、保存一条记录、根据id查找一条记录、修改记录等方法。如果我们不使用反射,按照一般的写法,那么我们           对应三个实体的DAO都要实现增删改查的操作。如果使用反射机制我们只需要定义一个基类泛型DAO,让其实现          所有的操作,然后使其他三个DAO分别继承该BaseDAO,然后通过反射去识别在运行过程具体实体类型,实现操
         作。

BaseDao.java

import java.util.List;

public interface BaseDao<T> {

public void save(T t);

public void update(T t);

public void delete(T t);

public T findById(Integer id);

public T findById(String id);

public List<T> findAll();

}

CategoryDao .java

public interface CategoryDao extends BaseDao<Category>{}

CategorySecondDao .java

public interface CategorySecondDao extends BaseDao<CategorySecond>{}

ProductDao .java

public interface ProductDao extends BaseDao<Product>{

List<Product> findHotProduct();  //也可以有其他的方法

}

BaseDaoImpl.java

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {

private Class clazz ;

public BaseDaoImpl() {

// 获得Class对象:

Class c = this.getClass();

System.out.println(c);

Type type = c.getGenericSuperclass();

ParameterizedType pType = (ParameterizedType) type;

System.out.println(pType);

Type[] types = pType.getActualTypeArguments();

this.clazz = (Class) types[0];  //获得具体的类型

}

@Override

public void delete(T t) {

this.getHibernateTemplate().delete(t);

}

@Override

public List<T> findAll() {

String hql = "from "+clazz.getSimpleName();

return this.getHibernateTemplate().find(hql);

}

@Override

public T findById(Integer id) {

return (T) this.getHibernateTemplate().get(clazz, id);

}

@Override

public T findById(String id) {

return (T) this.getHibernateTemplate().get(clazz, id);

}

@Override

public void save(T t) {

this.getHibernateTemplate().save(t);

}

@Override

public void update(T t) {

this.getHibernateTemplate().update(t);

}

CategoryDaoImpl .java

public class CategoryDaoImpl extends BaseDaoImpl<Category> implements CategoryDao {

}

CategorySecondDaoImpl .java

public class CategorySecondDaoImpl extends BaseDaoImpl<CategorySecond> implements CategorySecondDao {}

ProductDaoImpl .java

public class ProductDaoImpl extends BaseDaoImpl<Product> implements ProductDao {

public List<Product> findHotProduct() {

DetachedCriteria criteria = DetachedCriteria.forClass(Product.class);

criteria.add(Restrictions.eq("is_hot", 1));

criteria.addOrder(Order.desc("pdate"));

return this.getHibernateTemplate().findByCriteria(criteria, 0, 10);

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-15 20:45:14

Java反射应用案例的相关文章

通过案例一步学习理解java反射机制

java 反射机制 以下只是个人在学习反射过程中的笔记,如有错误请指出纠正. 1. 通过例子理解反射 获取类的类类型的三种方法 package Reflect; public class ClassReflect { public static void main(String[] args) { ClassReflect cr = new ClassReflect(); //方法一: Class c = cr.getClass(); //方法二: Class c1 =ClassReflect.

java反射案例

Java反射经典实例 2007-08-29 17:55:25 分类: Java Java提供了一套机制来动态执行方法和构造方法,以及数组操作等,这套机制就叫——反射.反射机制是如今很多流行框架的实现基础,其中包括Spring.Hibernate等.原理性的问题不是本文的重点,接下来让我们在实例中学习这套精彩的机制. 1. 得到某个对象的属性 1 public Object getProperty(Object owner, String fieldName) throws Exception {

java反射练习

这个java反射的练习,主要包含了反射的构造函数,属性,方法的调用,main方法的调用,以及一个简单的实战练习从文件中读取,并操作类.(用的是junit测试的,没有使用main方法的调用方式) Person类: package cn.wwh.www.reflect; /** *类的作用:纯粹是一个实体类包含属性和方法的测试类 * * *@author 一叶扁舟 *@version 1.0 *@创建时间: 2014-7-20   上午10:18:59 */ public class Person

Java知识总结:Java反射机制(用实例理解)

概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. Java中的反射是一个强大的工具,他能够创建灵活的代码,这些 代码可以在运行时装配,无需在组件之间进行链接,发射允许在编写和执行时,使程序代码能够接入装载到 JVM 中的类的内部信息 .而不是源代码中选定的类协作的代码.这使发射

java反射详解 (转至 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html)

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     pu

Java反射、Java代理模式

简单来说,JAVA反射是利用类名称来获得这个类的所有信息:代理,是有个传递过程,将自己的类对象传给其他类,让其他类来代理自己的类对象然后做事: 比喻:订外卖,送餐小哥手里的外卖就是我的对象,是我让他送的.静态代理就是我告诉送餐小哥外卖是我的(假设外卖小哥认识我),然后他直接就奔着我来了:动态代理就是我不告诉送餐小哥我是谁,他也不认识我,我只告诉他我的电话或者地址,他自己想办法找到我:注意,他有什么办法找到我呢?就是反射,他利用我的电话和地址,就知道我的一切了(夸张的说)就可以找到我了. 下面通过

Java 反射机制[Field反射]

Java 反射机制[Field反射] 1.  反射概念及功能 反射就是把Java类中的各种成分映射成相应的Java类.例如一个Java类中用一个Class类的对象来表示.一个类中的组成部分分为成员变量,方法,构造方法,包等等. Java反射机制主要提供了以下功能: 判断在运行时任意一个对象所属的类:在运行时构造任意一个类的对象:判断在运行时任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 2.  Field反射 以下代码将obj对象中的String类型的字段对应的

从java 反射看延迟加载(代理模式)(一)

先看一下网络上关于java 反射的小例子-- [案例1]通过一个对象获得完整的包名和类名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     public static void main(String[] args) {         Demo demo=new Demo();

java 反射 动态代理

在上一篇文章中介绍Java注解的时候,多次提到了Java的反射API.与javax.lang.model不同的是,通过反射API可以获取程序在运行时刻的内部结构.反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能.正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样.知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等.这种交互方式与直接在源代码中使用的效果是相同的,但是又额