java中的反射机制应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DTJ_74/article/details/52525269

平时常将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部分抽出来了,简单了。

猜你喜欢

转载自blog.csdn.net/DTJ_74/article/details/52525269