我正在使用一套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。
如何让原型方面正确订购?
这似乎是Spring的一个bug。如果我将<code>@Order</code>注释添加到方面,它们将正确排序。我已经提交了一个关于Spring的bug。https://jira.spring.io/browse/SPR-14959
我不认为原型
范围在某些方面得到支持,或者更有可能它没有意义。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一起工作。你看到这里有什么问题吗?我忘了添加一些代码了吗
问题内容: unicode对我来说很奇怪。我当时处理的是unicode很好,但是今天早上运行它时,u’\ u201d’一项出现错误并给了我 我查找了代码,显然是它的utf-32,但是当我尝试在解释器中对其进行解码时: 或与此相关的任何其他操作,它只是无法在任何编解码器中识别它,但我发现它是“正确的双引号” 我得到: 问题答案: 你已经有一个unicode字符串,就没有必要将其解码为unicode字