当前位置: 首页 > 知识库问答 >
问题:

Spring AOP原型范围内的方面正在无序发射

通奕
2023-03-14

我正在使用一套Spring AOP方面(主要来自我的库)。我发现,当方面bean的范围是“原型”时,我为方面指定的顺序不再被尊重(我确信,在过去的某个时候,比如说,1年前在Boot 1.3. x上,它被尊重了)。如果我删除XML中的“范围=”原型“”,或者JavaConfig中的@Scope(“原型”),排序是正确的,但是当范围是原型时,排序不起作用——方面以明显随机的顺序触发。这些方面实现了有序接口。

Bean定义遵循模式(JavaConfig):

@Bean
@Scope("prototype")
public CircuitBreakerAspect circuitBreakerAspect()
{
    CircuitBreakerAspect aspect = new CircuitBreakerAspect();
    aspect.setGraphiteClient(graphiteClient);
    aspect.setOrder(100);
    return aspect;
}

我需要这些方面是原型范围,因为其中一些方面(例如,RetryInterceptor)是有状态的(维护失败操作的计数,并将其导出到 JMX)。如果我删除原型范围,排序工作正常,但所有建议的 Bean 实例都使用相同的单例方面实例!

我在Spring Boot 1.4.1和Java8。

如何让原型方面正确订购?

共有2个答案

滑弘扬
2023-03-14

这似乎是Spring的一个bug。如果我将<code>@Order</code>注释添加到方面,它们将正确排序。我已经提交了一个关于Spring的bug。https://jira.spring.io/browse/SPR-14959

赏星河
2023-03-14

我不认为原型范围在某些方面得到支持,或者更有可能它没有意义。11.2.6 Aspect实例化模型的文档特别提到了这一点:

默认情况下,应用程序上下文中每个方面都有一个实例。

为了修改这种行为,Spring AOP支持AspectJ perthis和< code>pertarget实例化模型。也许它们会对你有用。

 类似资料:
  • 如何在原型范围bean上应用spring aop方面 但令人惊讶的是,在调用原型bean的joinpoint方法时,方面并没有执行。我确信我创建的切入点是正确的,因为在eclipse中,aspectJ插件在joinPoint方法上显示了aspectJ引用的可视化标记,这表明切入点是正确的,但不确定为什么在运行时调用PrototypeBean的joinPoint方法时没有执行它。 我是以不正确的方式

  • 问题内容: 我有一个名为Bar的类,带有以下注释: 在私人成员上,我具有以下注释: 在春季配置中,我有一个Foo类的bean。如果用它定义的bean 不起作用,则出现以下异常: NoSuchBeanDefinitionException:找不到依赖项为Foo的匹配bean:期望至少有1个有资格作为此依赖项的自动装配候选的bean 一旦我将注入的bean作用域更改为正常工作。 是否自动布线原型作用域

  • 我正在开发一个小的android演示应用程序,其中混合了一些java类和接口与kotlin。我想从一个名为MvpViewStateActivity的具有泛型类型参数的java类扩展: 其中只是一个空的java接口: MvpPresenter是这样一个java接口: 和SearchViewActivity(Java): 所以现在我创建了一个kotlin接口: 其中,Item是pojo数据类。 也是用

  • 问题内容: 假设两个类为ClassA和ClassB。假设ClassB依赖于ClassA。在配置文件中,如果将ClassA的范围定义为单例,将ClassB的范围定义为Prototype,那么每次创建ClassA的bean实例时,ClassB的实例会发生什么?每次返回ClassA实例时,将返回相同的ClassB实例还是创建新实例? 谢谢!!! 问题答案: 如果ClassB是原型,则始终创建ClassB

  • 我有一个带有@service和@Scope(“原型”)的服务类。我希望此服务的行为类似于控制器类中的原型。以下是我如何使用它: 以下是服务类别: 我使用自动配置属性运行spring boot。我比较“emailService”对象是否相同,得到的是相同的一个对象。这意味着@Scope(“prototype”)不能像预期的那样与@Service一起工作。你看到这里有什么问题吗?我忘了添加一些代码了吗

  • 嗯,很可能没有任何谜团,但我只是不够聪明,不知道我的问题是什么。然而,通常它毕竟是谜团! 很抱歉进行介绍,我的问题是原型范围似乎不适合我。我创建了一个带有Spring集成流的REST服务(流前面有一个http入站网关)。大多数bean的作用域都是原型。我通过使用线程调用它十次来测试流。此外,我还记录了bean引用(只需在被调用的对象中打印“this”),并且我看到了十次相同的引用! 据我所知,这意