1、代理模式
目标对象不能直接访问,通过代理对象增强功能访问。代理模式是指为其他对象提供一种代理以控制对这个对象的访问
静态代理:1、目标对象和代理对象实现同一个业务接口;2、目标对象必须实现接口;3、代理对象在程序运行前就已经存在;能够灵活的对目标对象进行切换,却无法进行功能的灵活切换;
静态代理的实现:
业务功能:请明星进行节目表演
明星刘德华:目标对象(无法直接访问)
刘德华助理:代理对象
我们:客户对象
面向接口编程(重要)
类中的成员变量设计为接口,方法的形参设计为接口,方法的返回值设计为接口,调用时接口指向实现类
//有接口和实现类,必须用接口指向实现类(规范)
面向接口编程:调用时实现,接口指向实现类
7、动态代理
代理对象在程序运行中动态在内存中构建,可以灵活地进行业务功能的切换
8、JDK动态代理
1)目标对象实现业务接口
2)代理对象不用实现业务接口
3)动态代理在运行前不存在,运行时在内存中构建
4)JDK动态代理灵活的进行业务切换
9、JDK动态代理用到的实现类和接口
它是使用现在的工具类完成JDK动态实现
1)proxy类
它是java.lang.reflect.proxy包下的类,他有一个方法proxy.newProxyInstance(。。。。)
专门用来生成动态代理对象。
public static Object newProxyInstance(ClassLoader loader//类加载器
,Class<?> interfaces,//目标对象实现的所有接口
InvocationHandler h//它就类似于Agent切换的功能,代理的功能和目标对象的业务功能调用在这
throws ILLegalArgumentException
)
2)类
发射用的类,用来目标对象的方法反射和调用
method对象接住我们正在调用的方法sing(),show()
method==sing(),show()
动态代理:jdk动态代理、CGLIB动态代理
10、动态代理存在的意义
在三层架构中,业务逻辑层通过接口访问层访问数据访问层的功能,动态代理可以实现
动态代理的实现规范
1、UserMapper.xml文件与UserMapper.java的接口必须同一个目录下
2、UserMapper.xml文件与UserMapper.java的接口文件名必须一致,后缀不管
3、 UserMapper.xml文件中的id与UserMapper.java的接口中的方法名称必须一致;
4、 UserMapper.xml文件中标签的parameterType属性值与UserMapper.java的接口中方法参数类型完全一致;
5、 UserMapper.xml文件中标签的resultType值与UserMapper.java的接口中方法返回值类型不一致;
6、 UserMapper.xml文件中的namespace属性必须是接口的完全限定名称.com.bjpowernode.mapper.UserMapper
7、在sqlMapconfig.xml文件中注册mapper文件时使用class=接口的完全限定名称com.bjpowernode.mapper.UsersMapper
11、动态代理访问的步骤
1)建表Users
2)新建的Maven工程,刷新可视化
3)修改目录
4)修改pom.xml
5)添加jdbc.propertis文件添加到resources目录下
6)添加sqlconfig.xml文件
7)添加实体类
8)添加mapper文件,新建UserMapper接口
9)在mapper文件夹下,新建UsersMapper.xml,完成增删改查功能
10)添加测试类测试功能
13#{}占位符
传参大部分使用#{}传参,它的底层使用的是PreParedStatement对象,是安全的数据库访问,防止sql注入,#{}里如何写,看parameterType参数的类型
1)如果parameterType的类型是简单类型(8种基本封装+String),则#{}里随便写,