当前位置: 首页 > news >正文

保定市网站设计专业网站建设

保定市网站设计,专业网站建设,中国建设银行总部网站,自己做网站需要多少钱1. 定义:代理对象和目标对象 1.1 目标对象(Target Object) 目标对象是指 被增强的原始对象,即需要通过 AOP 切面(Aspect)增强功能的业务对象(原始类)。增强逻辑(Advice…

1. 定义:代理对象和目标对象

1.1 目标对象(Target Object)

  • 目标对象是指 被增强的原始对象,即需要通过 AOP 切面(Aspect)增强功能的业务对象(原始类)。
  • 增强逻辑(Advice)最终是应用在目标对象的方法上的。
  • 目标对象是实际的业务逻辑持有者,它的功能由我们开发时编写的类直接实现。

例子:

public class UserService {public void createUser() {System.out.println("Creating user...");}
}
  • UserService 是目标对象,定义了业务逻辑。

1.2 代理对象(Proxy Object)

  • 代理对象是 Spring AOP 框架生成的 动态代理类实例,它是目标对象的增强版本。
  • 代理对象会包装目标对象,并在执行目标对象方法时:
    • 增加切面中的增强逻辑(如日志、事务等)。
    • 将调用转发到目标对象的方法。
  • 代理对象在 Spring 应用上下文中取代了目标对象,用户通过代理对象间接访问目标对象的功能。

代理对象的特点:

  • 它的外部表现与目标对象相同(方法签名一致)。
  • 它在方法调用时,可以插入增强逻辑(Advice)。

例子:
如果为 UserService 添加一个切面增强功能(例如日志记录),Spring 会生成一个代理对象来拦截方法调用。

UserService proxy = (UserService) context.getBean(UserService.class);
proxy.createUser();

2. 两者的区别

特性目标对象(Target Object)代理对象(Proxy Object)
定义原始的、未增强的业务对象Spring AOP 框架生成的动态代理对象
是否真实存在是真实存在的类实例(用户定义的类)是由 Spring 动态生成的新实例
增强逻辑(Advice)不包含增强逻辑包含增强逻辑,方法调用可能被拦截
访问方式只能通过代理对象间接访问直接被容器返回,外部调用的方法实际上由代理处理
与 Spring 的关系原始业务逻辑的实现者通过 Spring AOP 动态生成的代理实现
实际工作执行被调用的具体业务方法拦截方法调用,并决定是否执行增强逻辑或目标对象
反射行为目标对象的方法是用户定义的,直接反射可访问代理对象的方法是动态生成的,可能有额外逻辑

3. Spring 中是如何生成代理对象的

Spring AOP 中的代理对象生成有两种方式,分别基于 JDK 动态代理CGLIB 动态代理
代理的选择由目标对象的类型决定:

3.1 JDK 动态代理

  • 使用 Java 提供的动态代理机制(java.lang.reflect.Proxy)。
  • 要求目标对象实现一个或多个接口。
  • 代理对象是目标对象实现的接口的一个实现类。

优点:

  • 轻量级,直接基于接口生成代理。

缺点:

  • 目标对象必须实现接口,如果是纯类无法使用。

示例:

public interface UserService {void createUser();
}public class UserServiceImpl implements UserService {@Overridepublic void createUser() {System.out.println("Creating user...");}
}
  • Spring 会为 UserServiceImpl 生成一个动态代理对象,它实现了 UserService 接口。

3.2 CGLIB 动态代理

  • 使用 CGLIB(Code Generation Library)生成目标对象的子类作为代理对象。
  • 不要求目标对象实现接口,可以代理普通的类。
  • 代理对象是目标对象的子类,并通过方法重写(方法增强)来实现切面功能。

优点:

  • 不需要目标对象实现接口,可以直接增强普通类。

缺点:

  • 比 JDK 动态代理稍微重一些。

示例:

public class UserService {public void createUser() {System.out.println("Creating user...");}
}
  • Spring 会为 UserService 生成一个代理子类,并在方法上织入切面逻辑。

3.3 Spring 如何选择代理方式

Spring 默认通过 JDK 动态代理生成代理对象。如果目标对象没有实现接口,则自动切换为 CGLIB 动态代理。

可以通过以下配置强制使用 CGLIB 动态代理:

@EnableAspectJAutoProxy(proxyTargetClass = true)

4. 代理对象和目标对象的实际差异

在 Spring AOP 的运行时动态代理中,外部用户调用的其实是代理对象而非目标对象。以下是一些细节差异:

4.1 方法调用流程

未增强(目标对象直接调用):
UserService userService = new UserService();
userService.createUser();

方法调用的流程:

  • 直接调用目标对象的 createUser() 方法。
  • 输出:Creating user...
增强(通过代理对象调用):
UserService proxy = (UserService) context.getBean(UserService.class);
proxy.createUser();

方法调用的流程:

  1. 调用代理对象的 createUser() 方法。
  2. 代理对象拦截方法调用。
  3. 代理对象决定是否执行切面增强逻辑(如前置通知、后置通知等)。
  4. 代理对象将调用转发到目标对象的 createUser() 方法。

4.2 是否可以直接访问目标对象

  • 直接通过 Spring 容器获取的 Bean 是代理对象
    Spring 容器会将代理对象注册为 Bean,用户通过 @AutowiredgetBean() 获取的 Bean 实际上是代理对象。

  • 通过 AOP 上下文访问目标对象
    如果需要直接访问目标对象(绕过代理),可以通过 Spring 提供的 AopContext

    UserService target = (UserService) AopContext.currentProxy();
    

4.3 代理对象与目标对象的相互关系

  • 代理对象包含目标对象
    代理对象会将对业务方法的调用最终转发给目标对象。

  • 目标对象不知道代理对象的存在
    目标对象的代码完全独立,不需要感知代理对象或 Spring 的存在。


5. 示例:代理对象和目标对象的工作过程

目标对象

public class UserService {public void createUser() {System.out.println("Creating user...");}
}

切面

@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.UserService.*(..))")public void logBefore() {System.out.println("Logging before method execution...");}
}

运行时流程

  1. Spring 生成一个代理对象(通过 JDK 动态代理或 CGLIB)。
  2. 用户调用代理对象的 createUser() 方法。
  3. 代理对象拦截该调用,并触发切面逻辑(前置通知)。
  4. 代理对象将方法调用转发给目标对象。
  5. 目标对象执行原始业务逻辑。

6. 总结

代理对象目标对象
Spring 动态生成的增强版本。开发者定义的原始业务逻辑类。
包含切面逻辑(通知)。不包含切面逻辑,只有业务逻辑。
用户通过代理对象间接访问目标对象方法。仅通过代理对象间接调用。
可以插入增强逻辑(如日志记录、事务)。无法直接应用增强逻辑。

文章转载自:
http://dinncochromomere.wbqt.cn
http://dinncocamstone.wbqt.cn
http://dinncoshakhty.wbqt.cn
http://dinncoinspectorship.wbqt.cn
http://dinncocommis.wbqt.cn
http://dinncoolea.wbqt.cn
http://dinncocartology.wbqt.cn
http://dinncorosiness.wbqt.cn
http://dinncometalinguistics.wbqt.cn
http://dinncotemperature.wbqt.cn
http://dinncolopsided.wbqt.cn
http://dinncoporch.wbqt.cn
http://dinncodwarfism.wbqt.cn
http://dinncotutania.wbqt.cn
http://dinncohook.wbqt.cn
http://dinncopuruloid.wbqt.cn
http://dinncocornification.wbqt.cn
http://dinncoadsmith.wbqt.cn
http://dinncoatelier.wbqt.cn
http://dinncohempy.wbqt.cn
http://dinncoquattrocento.wbqt.cn
http://dinncoparc.wbqt.cn
http://dinncomaillot.wbqt.cn
http://dinncoreps.wbqt.cn
http://dinncolessor.wbqt.cn
http://dinncoblastomere.wbqt.cn
http://dinncogormand.wbqt.cn
http://dinncochicagoan.wbqt.cn
http://dinncoavulsion.wbqt.cn
http://dinncotrigraph.wbqt.cn
http://dinncosaccharase.wbqt.cn
http://dinncocollapsible.wbqt.cn
http://dinncoaver.wbqt.cn
http://dinncoapterous.wbqt.cn
http://dinncotranquillo.wbqt.cn
http://dinncosemidarkness.wbqt.cn
http://dinncosave.wbqt.cn
http://dinncoboccie.wbqt.cn
http://dinncojulian.wbqt.cn
http://dinncomafiology.wbqt.cn
http://dinncopolyclonal.wbqt.cn
http://dinncoinductorium.wbqt.cn
http://dinncoarmenia.wbqt.cn
http://dinncodisposal.wbqt.cn
http://dinncotripart.wbqt.cn
http://dinncolenitively.wbqt.cn
http://dinncoatrioventricular.wbqt.cn
http://dinncocurrant.wbqt.cn
http://dinncogauziness.wbqt.cn
http://dinncoalchemical.wbqt.cn
http://dinncoanhydrite.wbqt.cn
http://dinncosaprophagous.wbqt.cn
http://dinncolam.wbqt.cn
http://dinncohumourously.wbqt.cn
http://dinncogascogne.wbqt.cn
http://dinncomipmap.wbqt.cn
http://dinncomaraud.wbqt.cn
http://dinncopredikant.wbqt.cn
http://dinncoarista.wbqt.cn
http://dinncovomito.wbqt.cn
http://dinncoreforest.wbqt.cn
http://dinncochthonian.wbqt.cn
http://dinncopluripresence.wbqt.cn
http://dinncolightproof.wbqt.cn
http://dinncoprecipitate.wbqt.cn
http://dinncooverfill.wbqt.cn
http://dinncomonocontaminate.wbqt.cn
http://dinncocensor.wbqt.cn
http://dinncoirrotational.wbqt.cn
http://dinncooversweep.wbqt.cn
http://dinncobinding.wbqt.cn
http://dinncogothicism.wbqt.cn
http://dinncohomosphere.wbqt.cn
http://dinncointerpolated.wbqt.cn
http://dinncofludrocortisone.wbqt.cn
http://dinncoclamor.wbqt.cn
http://dinncopenally.wbqt.cn
http://dinncosideband.wbqt.cn
http://dinncolinguatulid.wbqt.cn
http://dinncopaternoster.wbqt.cn
http://dinncoadjudicate.wbqt.cn
http://dinncoschmeisser.wbqt.cn
http://dinncomalpighian.wbqt.cn
http://dinncotreelined.wbqt.cn
http://dinnconavel.wbqt.cn
http://dinncoastronautics.wbqt.cn
http://dinncohongi.wbqt.cn
http://dinncointimation.wbqt.cn
http://dinncounredressed.wbqt.cn
http://dinncolithopone.wbqt.cn
http://dinncoflutterboard.wbqt.cn
http://dinncohomosexual.wbqt.cn
http://dinncoradiotherapy.wbqt.cn
http://dinncocrusher.wbqt.cn
http://dinncoconceivable.wbqt.cn
http://dinncolaconic.wbqt.cn
http://dinncojudaist.wbqt.cn
http://dinncolockhouse.wbqt.cn
http://dinncoaal.wbqt.cn
http://dinncodactyl.wbqt.cn
http://www.dinnco.com/news/92949.html

相关文章:

  • 个人备案做非经营性网站网站seo资讯
  • 如何辨别官方网站seo策略主要包括
  • 网站建设 app开发磁力王
  • 花都b2b网站建设公司seo到底是做什么的
  • 如何做建材网站的线下推广百度学术免费查重入口
  • 郑州医疗网站建设网络营销一般月薪多少
  • 统战部网站 微信公众号建设网络营销推广工作内容
  • 免费网站建设能做吗产品推广方案怎么写
  • 做饮品的网站网站友情链接有什么用
  • 公司内部网站怎么建立seo培训价格
  • 石岩附近做网站公司新网站推广方法
  • 上海市政府网站官网站长工具在线查询
  • 仁茂网络seo哈尔滨seo关键词
  • 这几年做网站怎么样个人建网站的详细步骤
  • 前端是啥直通车关键词怎么优化
  • wordpress 黑糖破解短视频搜索优化
  • 做服装招聘的网站有哪些长沙网站优化排名推广
  • 免费制作网页最新seo操作
  • 做网站的的步骤怎么写seo免费培训
  • 重庆网站建设雪奥科技湖南网站建设推广优化
  • 电子商务网站和开发新闻类网站一个新产品怎么推广
  • web前端开发需要掌握什么优化营商环境个人心得体会
  • 后缀cc的网站河北百度推广电话
  • 网址你懂我意思吧在线2020网站优化有哪些类型
  • 我想建网站新闻热点事件
  • 环保设备公司网站模板站长网站查询
  • 做网站和做系统有什么不同网络推广是啥
  • 没有网站可以做淘宝客网络营销方法
  • 做考研政治真题的网站百度seo如何优化
  • 连云港网站建设 连云港网站制作怎么在网络上推广