spring第3天(反射改造getAllUser方法,代理)
使用反射改造getAllUser方法
-
使用反射改造getAllUser方法,使得该方法可以适用不同表的查询,但是,需要添加一个参数,Class
ca,我们就可以通过这个参数,获取到该对象中的属性和相关方法,并加以利用 -
注意:如果方法中采用了List
泛型(返回值),那么正常来讲,我们是需要在类上面也添加 的泛型,但是,如果类上面添加了泛型,则类中其他的属性和方法也跟着要添加,如果我们只想在某个
方法上面添加泛型,则可以在方法返回值类型的前面单独添加一个即可 -
ResultSetMetaData方法说明:
getMetaData():获取rs结果集中字段的数据(看不懂的东西)
getColumnCount():获取该表中的有效字段个数
getColumnName(int column):获取查询出来的数据当前指定序号的字段名称(数据库的真实名称)
rsm.getColumnLabel(column):获取查询出来的数据当前指定序号的字段别名
![image]()

代理Proxy
租户(买家)-->中介(从中间多获得一笔费用)-->房东
静态代理:
- 每一个被代理的对象都需要创建一个代理类,比较麻烦
- 静态代理在实现就得知道代理的是什么
动态代理: - 在程序运行的过程中产生的代理对象,不需要给每个被代理对象创建代理类
- 动态代理事先并不知道要代理的是什么,而是在运行时才知道
动态代理:JDK和CGLIB动态代理
jdk1.8之前CGLIB更好用,jdk1.8之后jdk更好用
JDK代理是基于反射机制实现
1,创建一个代理工厂:客户需要什么,只需要将对应的需求传入,代理工厂会根据客户的需求来自己分配代理,相比静态代理,不再需要去继承被代理类和实现被代理接口
1 注意:创建的代理工厂类需要实现InvocationHandler接口,实现invoke方法
2 invoke(Object proxy, Method method, Object[] args)方法说明:
- invoke():执行被代理对象中的方法,此处利用的是反射
- Object proxy:代理对象
- Method method:被代理对象中的方法
- Object[] args:被代理对象方法中的参数
创建一个获取获取代理对象的方法:动态生成某个类的代理
newProxyInstance(ClassLoader loader, class<?>[] interfaces, InvocationHandler h)
- ClassLoader loader:动态代理将被代理对象的Class对象加载到内存中
- class<?>[] interfaces:找到此被代理对象所实现的接口
- InvocationHandler h:将上面代理被对象的方法权限交给某个代理(某个代理工厂)
public Object getProxyInstance() {
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}


浙公网安备 33010602011771号