java反射实例

java中的反射机制一直被很多框架所应用,但我们很少接触,所以显得很神秘。今天我根据我做的一个实际的列子和大家一起来讨论下如何使用method来反射类的方法。

项目描述:在web工程中,数据库内有一张student表,简单对student表进行IUSD操作,

目的:只使用一个Servlet(或者action, 也不使用动态的Action)使用动态的action也可以实现此功能,但我觉得使用反射,视图层的代码简单得多,并且与业务逻辑无管,很好的进行了松耦.

代码:1 servlet 层里的

//获得页面的信息
        String sName = request.getParameter("sname");--页面中sname的值
        String sid = request.getParameter("sid");--页面中sid的值
        String sdesc = request.getParameter("sdesc");--页面中sdesc的值
        String mothod = request.getParameter("mothod"); --页面中的隐藏表单 请确保它与我们的实体逻辑类的方法名一致,
        //封装界面信息
        JstudentBean stu= new JstudentBean (); --JstudentBean 是一个简单的javabean 封装student的信息
        stu.setId(slid);
        stu.setName(sName);
        stu.setDesc(sdesc);
        //调用映射类 实现业务逻辑处理
       stuMethed meth = new stuMethed();
        meth.excute(mothod,stu);

2:映射控制类

public class stuMethed{
    stuDelegate delegate = null; --stuDelegate 它调用持久层的类来完成student的持久化操作
    public stuMethed() { --构造时注入工作对象(使用spring可以很方便的实现构造注入解耦)
        delegate = new stuDelegate ();
    }

    public Object excute(String methodfid,JstudentBean cla){
        Object obj = null;
        try {
            Method method = stuDelegate .class.getMethod(methodfid,
                    new Class[] {JstudentBean .class}); --得到与页面中的methodfid 名字相同的 方法的引用

第一个参数是 stuDelegate  中的方法名,第二个参数是 改方法中的参数

            obj = method.invoke(delegate,new Object[]{cla}); --调用  methodfid  的方法
        } catch (Exception ex) {
        }
        return obj;
    }
}

3:业务逻辑与持久层联系的类 实际工作的是这个类,我这里就简单写几个方法,你写的时候注意调用持久层的对象来实现student的持久化操作(持久化操作可以是DAO模式,或hibernate,或ejb 随便你选择)

public class stuDelegate {

 public void addstu(JstudentBean cla){}

public void deletestu(JstudentBean cla) {}

public void findstubyPk(JstudentBean cla) {}

public void updatestu(JstudentBean cla) {}

}

你在stuDelegate 写的方法名就是在jsp页面中mothod 隐藏域中可以选择的值,如果你想增加其他的方法,只需要在stuDelegate 中增加一个与页面中mothod 字段值对应的方法,其他的代码都不用更改,是不是比动态的action还方便呢,一个简单的反射控制类,使我们的servlet里的代码简介,明了。反射真的是很不错的东西,,

其实很多框架中大量的使用了反射,来简化程序的开发。这个列子是我学习spring和ejb中偶然想到的。一写还真写成功了。代码比较简陋,希望得到大家的指点。。。

东西比较乱,也不知道有没有把我想表达的意识表达清楚,有什么不懂的地方,或者你有更好的解决办法,请不要吝啬你的文字,留言告诉我。。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值