如何通知Spring必须填充Bean属性?

dav*_*lab 2 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;
  }
  //...
}
Run Code Online (Sandbox Code Playgroud)

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

<bean id="personGrabber" class="com.stackoverflow.example.PersonGrabber">
  <property name="dao"><null/></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

现在,这很糟糕,因为我真的需要dao在该bean变得有用之前将该属性设置为该bean.但是,我不想等到运行时等待它抛出一个NullPointerException.反正有没有告诉Spring 在使用之前必须填充bean属性?理想情况下,我希望它在初始化时崩溃,以便我不必等待它找出来.

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

public class PersonGrabber {
  @SpringRequired
  private PersonDAO dao;
  //...
}
Run Code Online (Sandbox Code Playgroud)

一些春季退伍军人的帮助吗?

Don*_*ows 5

对于你所拥有的类的类型,你总是需要将其他属性设置为非null值,最简单的实现方法是双重的.使用@Requiredsetter上的注释告诉Spring必须始终调用该方法,并在setter中检查注入是否是真实实例(即,不是null).

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

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

<context:annotation-config/>
Run Code Online (Sandbox Code Playgroud)

请注意,你很可能已经有了这个.