首页 > 解决方案 > Java AOP在构造对象时设置字段值

问题描述

我正在使用 Spring 和 Java 8。我想创建一个方面或类似的东西,在对象构造期间设置我的字段的值,构造函数 itsleft 验证该字段是否不为空,因此必须相应地设置值,是方面可能吗?

protected MyObject(TimeProvider timeProvider) {
        this.timeProvider = requireNonNull(timeProvider, " cannot be null");
        requireNonNull(someField, "someFieldcannot be null");

在这里,您可以看到 someField 在创建期间是必需的,并且未在构造函数的字段列表中指定。那是我的具体情况。

标签: javaaspectjspring-aop

解决方案


问题中有些东西听起来不对,我会解释...

Spring AOP 确实允许创建包装 Spring bean 的方面。它们与非弹簧管理对象完全无关。

现在,如果您在谈论 Spring Bean:MyObject那么 spring 将创建该对象的实例并注入TimeProvider- 另一个 bean。如果这TimeProvider不存在,spring context 将无法启动,这正是您想要实现的。您已经在使用构造函数注入,因此只要MyObject是 spring bean 就应该可以工作。显然,在这种情况下,您不需要任何方面,spring 将为您完成所有工作。

或者,如果MyObject不是 spring bean,那么 spring-aop 完全不相关,正如我所解释的那样。

可以更深入地分析 Spring AOP 的真正工作原理,您会意识到他们并没有像这样进行完全验证,但同样,为了回答这个问题,这比需要更深入的讨论


推荐阅读