Spring随笔4

来源:互联网 发布:linux下more命令 编辑:程序博客网 时间:2024/05/28 11:29
时间 内容 学习文献书籍 10.29 问题解决 Java反射机制的实例 Spring 3.x企业开发实战,java编程思想

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

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

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

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

select * from t_user where  user_name=? and password=?

就ok了。

2、Java反射机制

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

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

Car.java

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

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核心思想
0 0