当前位置:首页 > CN2资讯 > 正文内容

spring代理对象都是代理对象吗spring动态代理

2天前CN2资讯

最近看到一个比较有意思的问题,springIoc 产生的对象是否都是代理对象?答案是:spring ioc默认的都是原生对象 只有通过aop增强的对象才是代理对象。有@Transactional 注解或者配置文件:

1.<aop:config> 2. <aop:pointcut id="txPointcut" expression="execution(* com..service.impl.*.*(..))" /> 3. <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice" /> 1.</aop:config>

说到代理,又分为静态代理和动态代理。 静态代理

首先定义一个接口:

1.public interface Iuser { 2. void save(); 3.}

接口实现:

1.public class UserService implements Iuser { 2. @Override 3. public void save() { 4. System.out.println("save user 1"); 5. } 6.}

代理类:

1.public class UserServiceProxy implements Iuser{ 2. 3. Iuser iuser; 4. 5. public UserServiceProxy(Iuser iuser) { 6. this.iuser = iuser; 7. } 8. 9. @Override 10. public void save() { 11. System.out.println("save user before"); 12. iuser.save(); 13 System.out.println("save user after"); 14 } 15 测试: 16 public static void main(String[] args) { 17 Iuser iuser = new UserService(); 18. System.out.println("save user before"); 19 iuser.save(); 20 System.out.println("save user after"); 21 } 22 输出: 23. save user before 24 .save user 1 25 save user after

优点:

  • 易于理解和实现
  • 代理类和真实类的关系是编译期静态决定的,和下文马上要介绍的动态代理比较起来,执行时没有任何额外开销
  • 缺点:

    每一个真实类都需要一个创建新的代理类。 动态代理

    实现方式有两种,一个是JDK原生动态代理这个必须是接口,还有一种就是cglib来实现。

    还有几个比较经典的面试题:

  • 一个类里面有transaction注解,在A方法里面调研B方法事务会不起作用?
  • 这个就因为B方法是通过this调用的,this代表的是当前的原生对象,以至于事务不起作用。

    2 . 为什么jdk动态代理必须基于接口 ? 生成的代理类继承了Proxy,由于java是单继承,所以只能实现接口,通过接口实现 从代理模式的设计来说,充分利用了java的多态特性,也符合基于接口编码的规范 。

    3.spring 默认是哪种代理方式?

      你可能想看:

      扫描二维码推送至手机访问。

      版权声明:本文由皇冠云发布,如需转载请注明出处。

      本文链接:https://www.idchg.com/info/24176.html

      分享给朋友:

      “spring代理对象都是代理对象吗spring动态代理” 的相关文章

      RackNerd优惠活动详解:如何享受高性价比虚拟主机和VPS折扣

      RackNerd是一家在2019年成立的美国主机商。虽然成立时间不久,它却迅速在市场上崭露头角,赢得了许多VPS用户的青睐。公司的数据中心分别位于洛杉矶、圣何塞、西雅图和纽约等地,这些地理位置的选择让它的服务在各个区域都有稳定的覆盖。从我个人的体验来说,RackNerd的性价比非常高,尤其在价格和服...

      探索64clouds:方便的VPS管理工具及其功能解析

      什么是64clouds及其功能 在如今的云计算时代,64clouds无疑是一个让人耳目一新的名字。作为搬瓦工(BandwagonHost)VPS的KiwiVM控制面板域名,64clouds为用户提供了一个方便的管理平台。这意味着用户不必再为复杂的服务器管理技术而烦恼,64clouds的出现大大降低了...

      如何选择免费服务器以支持学习与项目开发

      在当今数字化快速发展的时代,免费服务器正变得越来越受欢迎。特别是对初学者、学生和小型企业来说,免费服务器为他们提供了一个难得的机会,让他们可以在没有资金压力的情况下进行项目学习和实践。简单来说,免费服务器就是云服务提供商为了吸引新用户推出的试用服务,通常会在一定时间内提供免费的计算资源和存储空间。...

      怎么看VPS的路由好不好:评估与优化路由性能的方法

      如何评估VPS路由性能 VPS的路由性能对网站的加载速度和用户体验至关重要。评估VPS的路由性能,我通常会关注几个关键指标,包括延迟、丢包率和带宽。了解这些内容能够帮助我判断服务器能否在高流量时段保持稳定运行。 在这过程中,我特别重视使用一些专业的测试工具。这些工具可以帮助我全面了解VPS的网络性能...

      LiteServer: 快速搭建轻量级本地开发服务器的终极指南

      1.1 什么是 LiteServer LiteServer 是一款轻量级的本地开发服务器,专为开发者提供简单、快速的web服务环境。它的设计理念是让开发者能够轻松地启动项目,而无需过多的配置和繁杂的设置。对于进行前端开发、静态网站测试,甚至小型后端服务的程序员来说,LiteServer 都是一个值得...

      VPS测速:优化服务器性能与用户体验的关键工具

      当谈到网络服务时,VPS(虚拟专用服务器)是一个绕不开的话题。它为用户提供了一个灵活且高效的网络环境,通过虚拟化技术将一台物理服务器分割成多个独立的虚拟服务器。用户可以拥有自己的操作系统、存储空间和带宽,这使得VPS成为了许多企业和个人的理想选择。 通过使用VPS,用户能够执行各种任务,比如搭建网站...