java - 为什么在普通 Java 文件中不会调用 InitializingBean 方法

标签 java spring

假设在我的 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工作?

最佳答案

InitializingBeanFactoryBean(即 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/

相关文章:

java - JPA 中 @Access 注释在实体级别的用途是什么?

java - Java 9 的新字符串实现是什么?

java - Spring Data Jpa展示

java - 是否可以在构造函数上使用@Resource?

java - 如何使用 Spring Security 将 'Remember me' 复选框引入现有项目?

找不到 Spring Security 标记库

java - postgresql:关系的权限被拒绝

java - 从 IE9 中的 javascript 检查 applet 中是否存在 Java 函数

java - 尝试解析 xml 文件但在部署的 GAE 中出现 java.security.AccessControlException

java - Spring MVC 返回 404