Day33 JavaWeb知识 (10)_注解&动态代理初步

一.设置Eclipse

  1. 关联TOMCAT
    开发过程中,环境发生变化(重新关联tomcat)
    *_删除servers窗口下的tomcat
    *_Project Explorer 窗口下的server
    *_重新关联window --->preferences --->servers --->runtime --->tomcat

二.注解  Annotation

  1. 注解和接口,类一样,都是属于数据类型
    注解可以在变量,方法,类之上加载
    注解可以有属性,也可以没有属性  @Override   @Time(timeout=1000)
    注解有作用范围(源码,编译期间,运行期间)
  2. 回顾JDK中出现的3种注解
    @Override      重写
    @Deprecated           声明下面的已过时
    @Suppresswarning     抑制编译器发生警告信息

三.自定义注解

  1. 格式
    //定义注解的时候,需要通过元注解Retention说明当前自定义注解的作用域(Class,Source,Runtime)
    @Retention();   
    //定义注解的时候,需要通过元注解Target说明当前的自定义注解的作用对象                   
    @Target();
    public @interface 注解名称 {
             public  属性类型   属性名称1();
             public  属性类型   属性名称2() default 默认值;
    }
  2. 自定义注解的属性支持的类型有 :
    基本数据类型(4类8种),String,Class(字节码类型),Annotation(注解类型), 枚举类型,以及以上类型的一维数组类型
  3. 注解作用:配置作用

四.动态代理模式

  1. 原理:通过虚拟机在内存中创建类似MyCar.class文件
    1. //参数1:固定值:告诉虚拟机用哪个字节码加载器加载内存中创建出来的字节码文件
      //参数2:告诉虚拟机内存中正在被创建的字节码文件中应该有哪些方法
      //参数3:告诉虚拟机正在被创建的字节码上的各个方法如何处理
      Proxy.newProxyInstance(TestCar.class.getClassLoader(),BCar.class.getInterfaces(),new InvocationHandler(){ 
               @Override
                 //返回值Object : 当前方法的返回值
                //参数2 : 当前的方法
                //参数3: 当前的方法需要传的参数
               public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
                        method.invoke(new BCar() , args);
               }
      });
  2. 字节码加载器:jak有一些程序,专业将各种字节码文件加载到内存中,这类程序简称为字节码加载器

五.动态代理解决网站的字符集编码问题

  1. 在过滤器中,为request上的getParameter()功能进行增强
    思路:
    省略了创建代理对象,详见四-1
    if(method.getName().equalsIgnoreCase("getParameter")){
            判断当前的请求是get/post     request.getMethod();
            如果是post,设置一句话:req.setCharacterEncoding("utf-8");
                                              obj=method.invoke(req,args);
            如果是get,调用原先的String v = (String)method.invoke(req,args);
                    将v进行转码 String vv = new String(v.getBytes("iso-8859-1"),"utf-8");   return vv;
    }else{
           obj = method.invoke(req , args);
    }
    return obj;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值