当前位置: 首页 > 面试题库 >

启用S​​pring AOP或AspectJ

翟鸿振
2023-03-14
问题内容

这是此问题的后续内容:

用于@Aspect方面的Spring自动装配bean为空

我最初的理解是,在使用Spring
AOP时,将使用@Aspect注释的类创建为Spring托管bean,因此依赖项注入将正常工作。但是,似乎带有@Aspect批注的对象是在spring容器外部创建的一个单例对象,因此,我必须像这样将其配置为XML,以便将其启用为spring托管bean:

<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" />

现在,这完全使我感到困惑。我认为以下配置将使用spring AOP:

<context:component-scan base-package="com.mysite.aspectPackage"/>
<aop:aspectj-autoproxy/>

因此,它将使用组件扫描创建方面bean来扫描@Aspect批注,然后autoproxy将创建一个beanPostProcessor,以适当的建议代理我上下文中的所有bean。然后,我想启用AspectJ,我需要一个完全不同的XML配置(顺便说一下,我似乎在文档中找不到该示例)。正是这种配置使用了AspectJ来创建容器之外的方面,或者通过操纵字节码而不是代理来工作。

注意:
这不是关于弹簧AOP和方面J之间区别的问题,请在此处明确说明:

Spring AOP与AspectJ


问题答案:

@Component将创建2个实例,一个在Spring容器内,一个在AspectJ容器内。

使用@Configurable允许spring在AspectJ容器实例化时为类管理依赖项注入等。

@Aspect是spring-aop支持的aspectj样式注释,其中运行时编织用于处理拦截等。

编译时编织允许您忽略字节码中将出现切入点的使用,这是通过Aspectj编译器完成的(有关mvn集成,请参见https://www.mojohaus.org/aspectj-
maven-plugin/
)。

无论您使用AspectJ编译器还是spring-aop都没有什么区别,除非您使用factory /
configurable,否则它不会以您希望的方式将您的方面创建为托管bean。

严格来说,Aspectj配置是类中将出现的切入点定义等。



 类似资料:
  • 问题内容: 我将Revel用于一个小型应用程序并添加了SSL。当我更新配置以指向http.port = 443时,对端口80的请求将被拒绝而不是被转发。有没有办法在Revel Framework上解决此问题?谢谢。 问题答案: 您可以自己添加一个简单的重定向处理程序。 尝试将其放入文件中: 请注意,在Revel的开发模式下,您必须首先在端口443上访问您的应用程序,才能正确启动Revel,然后运行

  • s

    描述 (Description) 这不是一个功能。 这是正则表达式替换运算符。 根据PATTERN中指定的正则表达式,数据将替换为REPLACE。 与m //一样,分隔符由s后面的第一个字符定义。 语法 (Syntax) 以下是此函数的简单语法 - s/PATTERN/REPLACE/ 返回值 (Return Value) 此函数在失败时返回0,并在成功时返回替换次数。 例子 (Example)

  • \S

    描述 (Description) 字符类\S匹配任何非空白字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo {

  • \s

    描述 (Description) 字符类\s匹配任何空格字符。 例子 (Example) 以下示例显示了预定义字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class PredefinedCharacterClassDemo { p

  • 问题内容: 在我上大学的这个Java项目中,我遇到一种情况,当前正在使用 其中msgs是一个链接的阻止队列,通过 但是,我想使用一个ObjectInputStream和一个ObjectOutputStream。我已经在构造函数中初始化了它们,并在构造它后刷新了ObjectOutputStream,我读到某个地方必须这样做。 我想同时发送Strings和另一个Object类型,通过网络将其称为gam

  • The Stress Terminal UI: s-tui Stress-Terminal UI, s-tui, monitors CPU temperature, frequency, power and utilization in a graphical way from the terminal. Screenshot Table of Contents The Stress Termin