spring第3天(反射改造getAllUser方法,代理)
使用反射改造getAllUser方法
-
使用反射改造getAllUser方法,使得该方法可以适用不同表的查询,但是,需要添加一个参数,Class
ca,我们就可以通过这个参数,获取到该对象中的属性和相关方法,并加以利用 -
注意:如果方法中采用了List
泛型(返回值),那么正常来讲,我们是需要在类上面也添加 的泛型,但是,如果类上面添加了泛型,则类中其他的属性和方法也跟着要添加,如果我们只想在某个
方法上面添加泛型,则可以在方法返回值类型的前面单独添加一个即可 -
ResultSetMetaData方法说明:
getMetaData():获取rs结果集中字段的数据(看不懂的东西)
getColumnCount():获取该表中的有效字段个数
getColumnName(int column):获取查询出来的数据当前指定序号的字段名称(数据库的真实名称)
rsm.getColumnLabel(column):获取查询出来的数据当前指定序号的字段别名
代理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);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 中如何实现缓存的预热?