Java笔记 使用反射来改进BaseDao

关于反射 反射的定义(via Wiki):在计算机科学中,反射是指一种特定类型的计算机程序能够在运行时以一种依 赖于它的代码的抽象特性和它的运行时行为的方式被更改的特性。用比喻来说,那种程式能够"观察“并且修改自己的行为。 Java中的反射示例如下: package dddspace.job.exercise1116; public class Foo { public void fun(String str) { System.out.println(str); } } package dddspace.job.exercise1116; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectionDemo { public static void main(String[] args) throws SecurityException, NoSuchMethodException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { // 不使用反射 Foo foo = new Foo(); foo.fun("no reflection"); // 使用反射 String className = "dddspace.job.exercise1116.Foo"; String funName = "fun"; // 获取类名 Class cls = Class.forName(className); // 创建Object实例 Object foo2 = cls.newInstance(); // 创建Method hello Method method = cls.getMethod("fun", String.class); // 使用反射来调用Method的invode方法,参数是目标对象+参数 method.invoke(foo, "use reflection"); } } 原始BaseDao设计 我先阐述一下BaseDao的设计想法:BaseDao是一个抽象类,提供一系列Dao方法”get()/getAll()/add()/update()/delete()/getCount()",通过泛型匹配的获取类,我取出一个方法来做示例。 ...

2009-11-17 · alswl

贴吧小结报告

终于完成了这个贴吧系统,虽然还有很多地方不完善,但是却包含了我很多心血和精力,也实践了我的很多想法。 具体的不说了,稍微说一下开发使用的技术:Java、Struts2、Hibernate、OGNL、Eclipse、Tomcat、MySQL、AJAX、jQue ry、SVN、UP开发模式、UML。 之中学习了很多内容,我恨兴奋,说起来这是我第一个完整写的一个网站系统,之前的asp啊,asp.NET多多少少借鉴了别人的代码。 ...

2009-07-02 · alswl

贴吧中期进度汇报

查看sql更新版本,我才发现这个项目已经做了将近2个月了。 之前一个多月都是我有空就做做,一边要写OpenSSL的模型,还要应付平时学习和考试,最近的1个星期,才开始全身心投入的,使这个项目变成了一个课程设计,但决不 止于课程设计。 由于鸡鸡的加入,而且对原先设计的一些不满意,我用UP的方式重新对系统进行了设计,从用例到实际类图,都重新设计并加以重构。 这是一个很有意义的过程,我花了很多时间在UML的使用上,用的是StarUML(开始使用Rose,发现太难入门了),继烨负责用例,我是在设计完第一个迭代过程之 后进行编写代码的。 ...

2009-06-27 · alswl

Struts2中Ajax的使用

贴吧1.0差不多可以完成了,进入界面美化,我服务器验证写完之后,开始用jQuery写js。 使用了jQuery的UI,后来想加入Ajax验证,但是遇到了问题: 09-05-23 07:53 WARN [org.apache.struts2.dispatcher.Dispatcher] - Could not find action or result There is no Action mapped for namespace / and action name AjaxLogin. - [unknown location] 我整整找了一个多小时,曾以为是action name的问题或者是package name, package namespace 的问题,为此我特意重新学习了一下他们的使用方法,但是仍然没有效果。 最后,终于在Google找到了一些资料: struts2 json jquery 集成详解来自 户起龙的博客 ...

2009-05-23 · alswl

乱码之战

今天重新设计了贴吧的数据库,参考了WordPress的无外键,设置default的值,我取消了两个外键,仅保留一个对应CategoryId的外键。 修改数据库时候发现MySQL的charset还是’latin’,就顺手修改成’utf-8’来保证统一,结果就出事了。 因为我修改了DAO,单元测试之后重新走一遍网页测试流程,结果发帖时候遇到乱码。 一回生两回熟,咱也不怕。 ...

2009-05-22 · alswl

Struts2的s:if标签的Bug和曲线使用

贴吧的用户状态显示,登录和未登录应该是不同的div显示,我决定用做标签。 本来应该很简单的事情,却没有我预想中的情形出现,检查后发现失效了,代码如下: <li>${session.userName}欢迎你</li> <li><a href="Logout.action">注销</a></li> Struts2的官方文档中标签库介绍写的很清楚,官方示例文档如下 ...

2009-05-21 · alswl

一个Action提交的问题

贴吧在提交帖子时候必须提供贴吧分类id categoryId,但是怎么把这个id提交到PostAction就比较麻烦了,在jsp页面中我试了好多办法,尝试使 用param和hidden(baidu用的hidden)标签,但是都不能读出cagegory.jsp页面的categoryId值。 最后我索性用试所有的表达式 <s:hidden name="topicCategoryId" value="%{#categoryId}" /> <s:hidden name="topicCategoryId" value="#categoryId" /> <s:hidden name="topicCategoryId" value="%{categoryId}" /> 最后一个果然有效。。。 貌似记得这是OPGL表达式?****

2009-05-09 · alswl

乱码!又见乱码!

今天解决了贴吧发帖的问题,可以正确的发送到正确的分类了。 随后遇到的问题是发帖完毕返回 Category.action 时候,无法读取争取的贴吧分类数据,经过在 struts.xml 里的Category.action 里的 result 后面的url加入参数,可以读取正确categoryId了 本来想在result中加入param元素而不是在url后面加 ?categoryId=0来实现,但是尝试了好久,Google和官方文档都没有什么解决方案 其中遇到的一个问题是「&」这个符号不能直接使用,需要进行转义,用「&」来替代。 ...

2009-05-09 · alswl

解决 Null value was assigned to a property

晚上开始写贴吧分类,把class改成category,规避了关键字class,也显得更合理,百度的分类就是ct 然后在分类上遇到一个小问题,category_father在数据库是integer类型,可以为null,因为存在根分类,在这种情况下用Hibernate读取 Category时会产生错误 在jUnit单元测试中就通不过,错误为 org.hibernate.PropertyAccessException: Null value was assigned to a property Google后,发现Category中定义categoryFather为int类型,是不支持null的,需要改为Wrapper类Interger ...

2009-05-08 · alswl

贴吧进度-09-05-07

今天写到创建帖子,在编码上遇到问题,jUnit下调用函数没有任何问题,那就表示问题出在Struts Filter捕获的文本上。 找了好几个方法都没有奏效。 游客登录情况下的Session还存在一点问题,原因是session类型转换上的问题,今天还没有好好的研究一下。 至此为止,登录注册写完了,静态校验写了一个毛胚,今天写完的现实帖子的列表,表现层用OGNL完成的,终于脱离开代码混杂的页面。 解决了一个tx.commit的错误,原来是《开发者突击》书上的代码有问题,我参考了Hibernate的官方文档,终于发现了错误的原因,tx.rollback ()应该在catch里面而不是final里面。 ...

2009-05-07 · alswl