我试图了解Spring是什么以及它是如何工作的。我不能回答的问题如下:
发布于 2020-04-11 17:03:10
与AspectJ相比,Spring没有被使用的原因之一是Spring不能向任何不是由Spring工厂创建的东西中添加一个方面。这是什么意思?不是所有的东西都是从Spring创建的吗?
简而言之,Spring为容器中的bean构建代理,并依赖于这些代理来实现AOP。
关于与AspectJ的比较:
来自Spring.io参考文档:
“……
因此,例如,Spring的AOP功能通常与Spring IoC容器一起使用。方面是通过使用普通bean定义语法来配置的(尽管这允许强大的“自动代理”功能)。这是与其他AOP实现的一个重要区别。对于Spring,您无法轻松或有效地完成一些事情,比如建议非常细粒度的对象(通常是域对象)。在这种情况下,AspectJ是最好的选择。然而,我们的经验是,Spring为企业级Java应用程序中的大多数问题提供了一个很好的解决方案,这些问题都适合AOP。
Spring从不与AspectJ竞争以提供全面的AOP解决方案。我们认为基于代理的框架(如Spring )和成熟的框架(如AspectJ )都是有价值的,它们是互补的,而不是在竞争中。Spring无缝地将Spring和IoC与AspectJ集成在一起,以便在一致的基于Spring的应用程序体系结构中启用AOP的所有使用。这种集成不影响Spring或AOP联盟API。Spring仍然向后兼容。有关Spring的讨论,请参阅下面一章。“
什么是"Spring是基于代理的“?Spring如何“幕后”使用Spring模块?
基于代理的意思是,bean被包装在另一个对象(代理)中,该对象(代理)约束对遵从act的调用,并且可以在对包装的对象调用真正的方法之前对该拦截采取行动。
实现此功能的方法有两种,一种是使用java动态代理(反射),另一种是使用CGLIB,它是一个在字节码级别添加代理功能的库。
发布于 2020-04-11 16:24:29
您应该阅读此以进行比较,https://stackoverflow.com/questions/1606559/spring-aop-vs-aspectj&ved=2ahUKEwim6cD24-DoAhVMzaQKHd4SDfMQFjAMegQICRAB&usg=AOvVaw1Sps_B0sPQPKRD5N9UtOpA&cshid=1586622128032
https://stackoverflow.com/questions/61159888
复制相似问题