您的位置:首页 > 编程语言 > Java开发

Spring随笔4

2015-10-29 18:17 399 查看
时间内容学习文献书籍
10.29问题解决Java反射机制的实例Spring 3.x企业开发实战,java编程思想

1、登录验证中的一点问题

在进行登录验证的时候,发现无论用户名/密码对错都会登陆成功,通过寻找getMatchUser方法,发现是其SQL语句出了问题,原SQL是

[code]select count(*) from t_user where user_name=? and password=?


这样一来,无论user_name和password是什么,它的结果不是1就是0,方法中,总会返回true。我将它改成

[code]select * from t_user where  user_name=? and password=?


就ok了。

2、Java反射机制

通过一个汽车制造的实例来演示Java反射机制

首先,定义一个Car类,包括brand,color和Maxspeed三个属性;两个构造方法,一个生产方法

Car.java

[code]public class Car {

    private String brand;
    private String color;
    private int maxSpeed;

    public Car(){

    }
    public Car(String brand,String color,int maxSpeed){
        this.brand=brand;
        this.color=color;
        this.maxSpeed=maxSpeed;
    }

    public void introduce(){
        System.out.println("brand:"+brand+",color:"+color+",maxSpeed:"+maxSpeed);
    }
    set/get方法。。。
}


通过Java反射机制间接的操作类

ReflectTest.java

[code]import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectTest {
    public static Car initByDefaultConst() throws Throwable{
    //通过类装载器获取Car类对象

    //获取当前线程的ClassLoader
    ClassLoader loader=Thread.currentThread().getContextClassLoader();
    //通过指定的全限定类“”装载Car类对应的反射实例
    Class clazz=loader.loadClass("com.changhong.reflect.Car");

    //获取类的默认构造器对象并通过它实例化Car
    //通过Car的反射类对象获取Car的构造函数对象cons
    Constructor cons=clazz.getDeclaredConstructor((Class[])null);
    //通过构造函数对象的newinstrance()方法实例化Car对象,等同于new Car();
    Car car=(Car)cons.newInstance();

    //通过反射方法设置属性,getMethod(String methodName,Class paramClass)获取属性 的set方法对象
    //获得方法对象,第一个参数是目标Class的方法名,第二个是对象的入参类型
    Method setBrand=clazz.getMethod("setBrand",String.class);
    //通过invoke(Object obj,obj param)方法调用目标类的方法,第一个参数是类实例对象,第二个是目标方法的入参
    setBrand.invoke(car, "Lamborghini Murcielago");
    Method setColor=clazz.getMethod("setColor",String.class);
    setColor.invoke(car, "red");
    Method setMaxSpeed=clazz.getMethod("setMaxSpeed",int.class);
    setMaxSpeed.invoke(car, 380);
    return car;
}
    public static void main(String[] args) throws Throwable{
        Car car=initByDefaultConst();
        car.introduce();
    }
}


这说明在编程中调用Class的各项功能,和通过构造函数和方法直接调用类函数的结果是一样的,在前面的代码中主要用到了Method,ClassLoader,Class,Constructor等反射类,通关这些反射类就可以调用目标Class的各项功能了。

工作总结

今日工作遇到的问题明日任务
学习Spring配置文件不恰当学习IOC和AOP
完成论坛登录实例关键映射位置关键字错误学习Java核心思想
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: