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核心思想 |
相关文章推荐
- Struts2标签实现for循环
- RxJava 各种操作符(2、3)
- java接口(2015年10月29日)
- spring项目使用hibernate validator 校验请求参数报错 java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundExce
- java集合框架 arrayblockingqueue应用分析
- java freemarker使用demo
- Android Studio导入Eclipse项目
- java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
- spring事务一
- Spring整合JMS(四)——事务管理
- Hadoop学习5--配置本地开发环境(Windows+Eclipse)
- eclipse与myeclipse(转自校内--2009-09-14 19:46 (分类:默认分类))
- Spring整合JMS(三)——MessageConverter介绍
- Spring整合JMS(二)——三种消息监听器
- Spring整合JMS(一)——基于ActiveMQ实现
- Spring与Velocity
- Spring Data Jpa 单表多条件删除配置
- Spring Data Jpa 单表多条件删除配置
- 有关花朵数一段java程序
- 【转载】Log4j之高级配置