spring第3天(反射改造getAllUser方法,代理)

使用反射改造getAllUser方法

  • 使用反射改造getAllUser方法,使得该方法可以适用不同表的查询,但是,需要添加一个参数,Class ca,我们就可以通过这个参数,获取到该对象中的属性和相关方法,并加以利用

  • 注意:如果方法中采用了List泛型(返回值),那么正常来讲,我们是需要在类上面也添加的泛型,但是,如果类上面添加了泛型,则类中其他的属性和方法也跟着要添加,如果我们只想在某个
    方法上面添加泛型,则可以在方法返回值类型的前面单独添加一个即可

  • ResultSetMetaData方法说明:
    getMetaData():获取rs结果集中字段的数据(看不懂的东西)
    getColumnCount():获取该表中的有效字段个数
    getColumnName(int column):获取查询出来的数据当前指定序号的字段名称(数据库的真实名称)
    rsm.getColumnLabel(column):获取查询出来的数据当前指定序号的字段别名
    image

image

代理Proxy

租户(买家)-->中介(从中间多获得一笔费用)-->房东

静态代理:

  1. 每一个被代理的对象都需要创建一个代理类,比较麻烦
  2. 静态代理在实现就得知道代理的是什么
    动态代理:
  3. 在程序运行的过程中产生的代理对象,不需要给每个被代理对象创建代理类
  4. 动态代理事先并不知道要代理的是什么,而是在运行时才知道

动态代理: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);
}
posted @   不再犹豫27  阅读(36)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示