java中的反射机制应用

来源:互联网 发布:用java做幸运抽奖 编辑:程序博客网 时间:2024/05/16 13:49

平时常将CRUD的数据库操作抽出来,那么反射机制获取实例这个就比较应用广泛了。
直接上代码。


定义一个IBaseDao接口。

package com.reflect.pro3;public interface IBaseDao<T> {    void save(T t);    void saveOrUpdate(T t);    void delete(T t);    void update(T t);}

有接口,当然就有实现类了。

package com.reflect.pro3;import java.lang.reflect.ParameterizedType;@SuppressWarnings("unchecked")public class BaseDao<T> implements IBaseDao<T> {    protected Class<T> entityClass;    public BaseDao() {    }    protected Class<T> getEntityClass() {        if (entityClass == null) {            // getClass().getGenericSuperclass()返回表示此 Class 所表示的实体(类、接口、基本类型或            // void)的直接超类的 Type            entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())                    .getActualTypeArguments()[0];        }        return entityClass;    }    @Override    public void save(T t) {        // TODO Auto-generated method stub        System.out.println("save" + t);    }    @Override    public void saveOrUpdate(T t) {        // TODO Auto-generated method stub        System.out.println("saveOrUpdate" + t);    }    @Override    public void delete(T t) {        // TODO Auto-generated method stub        System.out.println("delete" + t);    }    @Override    public void update(T t) {        // TODO Auto-generated method stub        System.out.println("update" + t);    }}

实现·类里面已经写好增删改差操作。
但系由于不知道是什么类型的javabean,直接用泛型写。方便扩充。
举个例子:


定义一个LoginEntity的javabean类。进行测试。

package com.reflect.pro3;public class LoginEntity {        private String username;        private String password;        public String getUsername() {            return username;        }        public void setUsername(String username) {            this.username = username;        }        public String getPassword() {            return password;        }        public void setPassword(String password) {            this.password = password;        }        public LoginEntity() {            super();        }        public LoginEntity(String username, String password) {            super();            this.username = username;            this.password = password;        }        @Override        public String toString() {            return "LoginEntity [username=" + username + ", password=" + password + "]";        }}

上面直接重写toString方法,方便等下的输出。


定义一个ILoginDao 接口。并且实现IBaseDao接口。为啥这么做,这么做可以呢?接口的继承,实现更多的方法。也可以扩充这里的ILoginDao方法。java多态的体现。

package com.reflect.pro3;public interface ILoginDao extends IBaseDao<LoginEntity> {        //日后扩充不同的需求。}

有接口肯定就有实现类。

package com.reflect.pro3;public class LoginDao extends BaseDao<LoginEntity> implements ILoginDao {}

这里只要继承了BaseDao类实现ILoginDao接口,那么就有了对应的方法了。


最后写个测试类。

package com.reflect.pro3;public class TestLoginPro {    public static void main(String[] args) {        ILoginDao iLoginDao = new LoginDao();        LoginEntity entity = new LoginEntity("tanweicheng", "123456");        iLoginDao.save(entity);        iLoginDao.delete(entity);        iLoginDao.saveOrUpdate(entity);        iLoginDao.delete(entity);    }}

运行结果:

saveLoginEntity [username=tanweicheng, password=123456]deleteLoginEntity [username=tanweicheng, password=123456]saveOrUpdateLoginEntity [username=tanweicheng, password=123456]deleteLoginEntity [username=tanweicheng, password=123456]

这个·就是反射机制的应用,通过发射获取对应的对象。这么做就将相同的CRUD部分抽出来了,简单了。

0 0
原创粉丝点击