您的位置:首页 > 其它

利用反射,实现类的封装

2012-02-16 00:27 232 查看
package com.dy.model.Impl;

import java.lang.reflect.Method;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class Test2 {

public static void main(String[] args) {

try {

Connection conn=getDBConn();

Statement st=conn.createStatement();

ResultSet set=st.executeQuery("select * from user_info ");

Test2 t=new Test2();

UserInfo u=new UserInfo();

List us=t.invoke(u, set);

for (Object object : us) {

UserInfo user=(UserInfo)object;

System.out.println("id:"+user.getUuid());

System.out.println("name:"+user.getUsername());

System.out.println("password:"+user.getPassword());

System.out.println("enterdate:"+user.getEnterdate());

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getDBConn(){

String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=yiwang";

String user = "sa";

String password = "admin";

String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

Connection conn = null;

try {

Class.forName(className);

conn = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

public List<Object> invoke(Object obj, ResultSet set) throws Exception{

// 得到类对象

Class cls = obj.getClass();

List<Object> list =new ArrayList<Object>();

// 得到所有的方法,包括从父类继承过来的方法

// Method []methList=cls.getMethods();

// 下面是得到的是String类本身声明的方法

Method[] methList = cls.getDeclaredMethods();

// 遍历所有的方法

while(set.next()){

Object obj2=cls.newInstance();

for (Method m : methList) {

if(m.getName().indexOf("set")!=-1){

// 方法名

System.out.println("方法名=" + m.getName());

// 方法声明所在的类

System.out.println("声明的类=" + m.getDeclaringClass());

// 获取所有参数类型的集体

Class[] paramTypes = m.getParameterTypes();

// 传入参数的集合

System.out.println("length:"+paramTypes.length);

Object[] argList = new Object[paramTypes.length];

// 遍历参数类型

for (int i = 0; i < paramTypes.length; i++) {

if (paramTypes[i].toString().equals("class java.lang.String")) {

argList[i] = set.getString(m.getName().substring(3).toLowerCase());

} else if (paramTypes[i].toString().equals("int")) {

argList[i] = set.getInt(m.getName().substring(3).toLowerCase());

} else if (paramTypes[i].toString().equals("class java.util.Date")) {

argList[i] = set.getDate(m.getName().substring(3).toLowerCase());

}

//注入相应的值

m.invoke(obj2, argList);

}

}

}

list.add(obj2);

}

return list;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐