miwaiwai

导航

静态代理

静态代理:

  是一种代理模式的一种

  特点:

    1>目标对象和代理对象实现同一个业务接口

    2>目标对象必须实现接口

    3>代理对象在程序运行前已经存在(class文件)

    4>能够灵活的进行目标对象的切换,却发发进行功能的灵活处理(使用动态代理解决词问题)

2.面向接口编程(重要)

   类中的成员变量设计为接口,

  方法的形参设计为接口,

  方法的返回值设计为接口,

  调用时接口指向实现类

3.动态代理

  代理对象在程序运行的过程中动态在内存构建,可以灵活的进行业务功能的切换

4.JDK动态代理,父类代理

  1>目标对象必须实现业务接口

  2>JDK代理对象不需要实现业务接口

  3>JDK动态代理的对象在程序运行前不存在,在程序运行时在内存中构建.

  4>JDK动态代理灵活的进行业务功能的切换

  5>本类中的方法(非接口中的方法)不能被代理

5.JDK动态代理用的类和接口

  它是使用现成的工具类完成JDK动态实现

  1>Proxy类

  它是java.lang.reflect.Proxy包下的类,它 有一个方法Proxy.newProxyInstance(.....)专门用来生成动态代理对象

  public static Object newProxyInstance(

                //ClassLoader loader,//类加载器,完成目标对象的加载

                target.getClass().getClassLoader(;)

                //Class<?>[] interfaces,//目标对象实现的所有接口,目的是拿到接口中的所有方法

                target.getClass().getClassLoader(),

                //InvocationHandler h) 实现代理功能的接口,我们传入的是匿名内部实现,它就是类似于Agent的功能,代理的功能和目标对象的业务功能调用在这里

                new InvocationHandler(){

                @Overrider  

                public Object invoke(

                      //创建代理对象

                      Object proxy,

                      //method就是目标方法sing(),show()

                      Method method,

                      //目标方法的参数

                      Object[] args) throws Throwable{

                      //代理功能

                      System,out.println("预定时间......")

                      //代理功能

                      System,out.println("预定场地......")

                      //主业务功能实现

                      Object obj=method.invoke(target,args);

                      //代理功能

                      System,out.println("结算费用......")

                    return obj;//切记:这个是目标方法的返回值

                        }

 

 

              }

  throws IllegalArgumentException

         ){...}

  2.Method类

   反射用的类,用来进行目标对象的方法的反射调用

   method对象接住我们正在调用的方法sing(),show()

   method==sing(),show()

   method.invoke()====>手工调用目标方法sing(),show()

  3)InvocationHandler接口

  它是实现代理和业务功能的,我们在调用时使用匿名内部实现

10.CGlib代理,又被称为子类代理

  通过动态的在内存中构建子类对象,重写父类的方法进行代理功能的增强.如果目标对象没有实现接口,则只能通过CGLib子类代理来进行功能增强

   子类代理是对象字节码框架ASM来实现的

  注意:

    1.被代理的类不能为final,否则会报错

    2.目标对象的方法如果final/static,name就不会被拦截,即不会执行目标对象额外的业务方法

SM框架步骤:

1.添加框架步骤

  1>添加依赖

  2>添加配置文件

  具体步骤:

  1.新建库建表

  2.新建Maven项目,选quick模块

  3.修改目录,添加缺失的目录,修改目录属性

  4.修建pom.xml文件,添加MyBatis依赖,添加mysql驱动的依赖

  5.修改pom.xml文件,添加资源文件指定

  6.在ideal中添加数据库的可视化

  7.添加jdbc.properties属性文件(数据库的配置)

  8.添加SqlMapConfig.xml文件,MyBatis的核心配置文件

  9.创建实体类Student,用来封装数据

  10.添加完成学生表的增删改查的功能StudentMapper.xml文件

  11.创建测试类,进行功能测试

   

posted on 2022-08-27 10:54  米歪歪  阅读(25)  评论(0编辑  收藏  举报