假设在我的 java 类中我有
class myClass{
public static void main ..{
Validator validator;
LocalValidatorFactoryBean localValidatorFactory = new LocalValidatorFactoryBean();
validator = localValidatorFactory.getValidator();
}
在最后一行我得到 nullPointerException。这是因为在我的 localValidatorFactory 中,ValidatorFactory
属性为 null,我猜这负责为我提供 validator 。
现在,我的问题是,如果这是一个动态 Web 项目,并且我有一个上下文文件,其中我定义了所有这些类,那么在这种情况下它就可以工作。因为在这种情况下,我猜会调用 afterPropertiesSet
方法来设置属性。
但是为什么在这种情况下不起作用呢?我该怎么做才能让它发挥作用?
是不是,我应该有 contextFile,它包含所有这些东西,并且在我的 java 文件中,我执行 ApplicationContext.getBean()
,并且在这些步骤之后,它会起作用吗?这是否意味着只有这样完成后initializingBean才会起作用?在正常的java代码中,我无法使initializingBean工作?
最佳答案
InitializingBean
和 FactoryBean
(即 LocalValidatorFactoryBean
)是 spring 框架的回调接口(interface),但您的代码没有使用它。
LocalValidatorFactoryBean
可以定义由容器 Autowiring (即解析和注入(inject))的依赖项,但您自己创建实例,因此 Spring 无法参与并正确处理这些回调。
您可以在“普通 java 代码”中正确地完成所有这些工作,但自己调用工厂 bean 和 afterPropertiesSet 的 setter 方法。在这种情况下,当 LocalValidatorFactoryBean
是 Spring 托管 bean 时,您基本上会执行 Spring 自动为您执行的操作。
关于java - 为什么在普通 Java 文件中不会调用 InitializingBean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23513580/