Java AOP在构造对象时设置字段值

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

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

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

a692613576 回答:Java AOP在构造对象时设置字段值

这个问题听起来有些不对劲,我会解释...

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

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

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

有可能更深入地分析Spring AOP的实际工作原理,您将意识到他们并没有像这样进行完全的验证,但是同样,对于回答这个问题,这是一个比需要的更高级的讨论 >

,

您可以使用BeanFactory之一

  1. 创建给定类的新实例(非单例)-将为您完成
  2. 对已经存在的对象执行注入。

在两种情况下,设置器/字段上的@Autowire + @NotNull应该可以解决问题。

例如检查https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/AutowireCapableBeanFactory.html#autowireBean-java.lang.Object-或任何其他变体。

本文链接:https://www.f2er.com/2899146.html

大家都在问