[英]Java AOP set field value while constructing object
我正在使用 Spring 和 Java 8。我想创建一个方面或类似的东西,在对象构造期间设置我的字段的值,构造函数 itsleft 验证该字段是否为空,因此必须相应地设置该值,是方面可能吗?
protected MyObject(TimeProvider timeProvider) {
this.timeProvider = requireNonNull(timeProvider, " cannot be null");
requireNonNull(someField, "someFieldcannot be null");
在这里你可以看到 someField 在创建过程中是必需的,并且没有在构造函数的字段列表中指定。 那是我的具体情况。
问题中有些东西听起来不对,我会解释...
Spring AOP 确实允许创建将包装 Spring bean 的方面。 它们与非 spring 管理的对象完全无关。
现在如果你在谈论 Spring Bean: MyObject
那么 spring 将创建这个对象的实例并注入TimeProvider
- 另一个 bean。 如果此TimeProvider
不存在,则 spring 上下文将无法启动,这正是您要实现的目标。 您已经在使用构造函数注入,所以只要MyObject
是一个 spring bean,这应该可以工作。 显然,在这种情况下,您不需要任何方面,spring 将为您完成所有工作。
或者,如果MyObject
不是 spring bean,那么 spring-aop 就如我所解释的那样完全无关紧要。
可以更深入地分析 Spring AOP 的真正工作原理,您会意识到它们并没有完全像这样进行验证,但是同样,这是比回答这个问题所需的更高级的讨论
您可以使用BeanFactory
来
在这两种情况下,setter/field 上的@Autowire
+ @NotNull
都可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.