java - Java AOP在构造对象时设置字段值
问题描述
我正在使用 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 Bean:MyObject
那么 spring 将创建该对象的实例并注入TimeProvider
- 另一个 bean。如果这TimeProvider
不存在,spring context 将无法启动,这正是您想要实现的。您已经在使用构造函数注入,因此只要MyObject
是 spring bean 就应该可以工作。显然,在这种情况下,您不需要任何方面,spring 将为您完成所有工作。
或者,如果MyObject
不是 spring bean,那么 spring-aop 完全不相关,正如我所解释的那样。
可以更深入地分析 Spring AOP 的真正工作原理,您会意识到他们并没有像这样进行完全验证,但同样,为了回答这个问题,这比需要更深入的讨论
推荐阅读
- ios - 如何仅从库中获取所有视频?
- javascript - 为什么我要删除的元素未定义?
- java - 参数化类“ABC”的原始使用
- apache-kafka - 具有多个输出主题的 Kafka 流拓扑的并发性
- python - Python Selenium 获取 URL 未加载
- mongodb - noSQL DB 上的版本控制应用程序
- r - equatiomatic:回归模型,因变量有帽子,没有 epsilon
- c#-9.0 - C# 9 默认实现导致错误
- python - 去除背景噪声后找到桅杆的轮廓
- python - 在 Linux Mint 和 Spyder 上使用不同的 Anaconda 环境