java - 如何向 Spring 发出必须填充 Bean 属性的信号?

标签 java spring annotations javabeans

假设我有一个这样的 Java 类:

public class PersonGrabber {
  private PersonDAO dao;

  public void setDao(PersonDao dao) {
    this.dao = dao;
  }
  public PersonDAO getDao() {
    return this.dao;
  }
  //...
}

我有一个相应的 Spring bean,如下所示:

<bean id="personGrabber" class="com.stackoverflow.example.PersonGrabber">
  <property name="dao"><null/></property>
</bean>

现在,这很糟糕,因为我确实需要在该 bean 变得有用之前将 dao 属性设置为该 bean 上的某些内容。但是,我不想等到运行时才抛出 NullPointerException。无论如何要告诉 Spring 一个 bean 属性 必须 在使用之前被填充?理想情况下,我希望它在初始化时崩溃,这样我就不必等待它找出答案。

我希望有类似注释的东西:

public class PersonGrabber {
  @SpringRequired
  private PersonDAO dao;
  //...
}

有一些 Spring 老手的帮助吗?

最佳答案

对于您所拥有的类类型,您总是需要将其他属性设置为非空值,执行此操作的最简单方法是两方面的事情。在 setter 上使用 @Required 注释告诉 Spring 必须始终调用该方法,并在 setter 内部检查以查看注入(inject)是否是真实实例(即不为 null ).

@Required
public void setDao(PersonDao dao) {
    if (dao == null)
        throw new IllegalArgumentException("property 'dao' is null");
    this.dao = dao;
}

最后一小部分是您需要确保在您的 Spring 配置文件中打开注释处理:

<context:annotation-config/>

请注意,您很有可能已经知道了。

关于java - 如何向 Spring 发出必须填充 Bean 属性的信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684603/

相关文章:

java - Spring Web MVC Hibernate 集成错误

带有刷新 token 工作流程问题的 Java Spring JWT

java - 使用自定义注释的组件扫描

mysql - 如何在Mysql中使用用户定义的@variable作为线程安全

scala 注释参数需要是常量,但最终的 val 没有成功

java - ManyToManyToMany - 使用 Hibernate 注释连接三个表

Java 对象 getter 和 setter 良好实践

java - 无法迭代 HashMap 键?

java - 如何在 Java 中将 YMD LDAP 时间戳转换为日期时间?

java - 为 ASN.1 标识符获取合理的名称