反射:reflect 及其应用

反射:reflect

​ Class:所有类的字节码文件

Class.forName(全类名);
类名.class;
实例.getClass();

​ Field:getDeclaredField("");/getDeclaredFields();

修饰符/类型/名称

​ Method:

获取:getDeclaredMethod("",参数类型的class...param);/getDeclaredMethods();
注:此时返回类型Method
调用:invoke(实例,实参值...obj)
注:返回Object类型,如果调用的方法有返回值,从invoke的返回结果里取出值;

​ Constructor

实例方法一:
获得类的构造器:Constructor c=类对象.getDeclaredConstructor(参数类型的class...)
调用构造器:c.newInstance(实参值...obj); ---获得该类的实例
实例方法二:
类对象.newInstance(); ---调用该类的无参构造器,直接获得的是该类的实例

反射应用:

BaseService

在service层处理请求中的分发(寻找要调用的方法):
	页面发起请求:例,/goods?action=all
	在service中接收到goods请求,与现有的地址相匹配,寻找对应的servlet,进入servlet后,具体的业务实现定义在了该servlet中的方法里
		class GoodsService extends BaseService{
             protected void all(HttpServletRequest req,HttpServletResponse resp){
             }
		}
		class Goods2Service extends BaseService{
             protected void all(HttpServletRequest req,HttpServletResponse resp){
             }
		}
		class Goods3Service extends BaseService{
             protected void all(HttpServletRequest req,HttpServletResponse resp){
             }
		}
	定义了一个所有service的父类BaseService:使用反射方式查找所请求的servlet中的方法:
		class BaseService extends HttpServlet{
            protected void service(HttpServletRequest req,HttpServletResponse resp){
                String action=req.getParameter("action");
                Class clazz=this.getClass();
                Object obj=claszz.newInstance();
                Method method=clazz.getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class);
                method.invoke(obj,req,resp);
            }
		}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值