Spring Core是如何利用Spring AOP的



我正在努力了解什么是Spring AOP以及它是如何工作的。我无法回答的问题如下:

  1. 与AspectJ相比,Spring AOP没有被使用的原因之一是Spring AOP不能向任何不是由Spring工厂创建的东西添加方面。这是什么意思?不是所有的东西都是从弹簧工厂创造出来的吗
  2. Spring Core如何在"后台"使用Spring AOP模块
  3. "SpringAOP是基于代理的"是什么意思

与AspectJ相比,没有使用Spring AOP的原因之一是Spring AOP不能向任何未创建的内容添加方面弹簧工厂。这是什么意思?不是一切都创造了吗来自弹簧厂?

简而言之,Spring为容器中的bean构建代理,并重新部署这些代理来实现AOP。

关于与AspectJ:的比较

来自Spring.io参考文档:

"…

因此,例如,Spring Framework的AOP功能通常与Spring IoC容器一起使用。特性是通过使用普通的bean定义语法来配置的(尽管这允许强大的"自动代理"功能(。这是与其他AOP实现的关键区别。您无法使用SpringAOP轻松或高效地完成一些事情,例如建议非常细粒度的对象(通常是域对象(。在这种情况下,AspectJ是最好的选择。然而,我们的经验是,Spring AOP为企业Java应用程序中的大多数问题提供了一个极好的解决方案,这些问题都适用于AOP。

Spring AOP从不努力与AspectJ竞争以提供全面的AOP解决方案。我们相信,基于代理的框架(如SpringAOP(和成熟的框架(例如AspectJ(都是有价值的,它们是互补的,而不是竞争的。Spring将Spring AOP和IoC与AspectJ无缝集成,以在一致的基于Spring的应用程序架构中实现AOP的所有使用。这种集成不会影响SpringAOP API或AOP联盟API。Spring AOP保持向后兼容。有关Spring AOP API的讨论,请参阅以下章节。">

"SpringAOP是基于代理的"是什么意思?Spring Core如何在"后台"使用Spring AOP模块?

基于代理意味着,bean被封装在另一个对象(代理(中,该对象迭代接受对obejct的调用,并且可以在调用封装的oject上的真实方法之前对该拦截采取行动。

有两种方法可以实现这一点,一种是使用java动态代理(反射(,另一种是利用CGLIB,这是一个在字节码级别添加代理功能的库。

Spring.io参考文档AOP
关于Proxys 的文章

您应该阅读此内容进行比较https://stackoverflow.com/questions/1606559/spring-aop-vs-aspectj&ved=2ahUKEwim6cD24-DoAhVMzaQKHd4SDfMQFjAMegQICRAB&usg=AOvVaw1Sps_B0sPQPKRD5N9UtOpA&cshid=1586622128032

最新更新