我的XML配置包括以下bean定义:

<bean id="abstractFormAction" class="staffing.server.action.form.AbstractFormAction" abstract="true" parent="baseAction">
    <property name="volunteerSaver" ref="volunteerSaver"/>
    <property name="emailSender" ref="emailSender"/>
    <property name="closed" value="${form.closed}"/>
</bean>

<bean id="volunteerFormAction" class="staffing.server.action.form.VolunteerFormAction" parent="abstractFormAction">
    <property name="captchaGenerator" ref="captcha"/>
</bean>


指示VolunteerFormAction是AbstactFormAction的具体实现,并将继承AbstactFormAction的属性。

在AbstractFormAction中,我声明如下属性:

@Autowired protected VolunteerSaver volunteerSaver;
@Autowired protected EmailSender emailSender;
@Autowired protected boolean closed;


尝试部署时出现以下异常:


  org.springframework.beans.factory.BeanCreationException:错误
  创建名称为'volunteerFormAction'的bean:注入自动装配
  依赖失败;嵌套异常为
  org.springframework.beans.factory.BeanCreationException:无法
  autowire字段:受保护的布尔值
  staffing.server.action.form.AbstractFormAction.closed;嵌套的
  例外是
  org.springframework.beans.factory.NoSuchBeanDefinitionException:否
  找到类型为[boolean]的依赖项的依赖项:预期为
  至少1个符合此条件的自动装配候选豆
  依赖性。依赖注释:
  {@ org.springframework.beans.factory.annotation.Autowired(required = true)}


似乎在抱怨它找不到字节布尔值的bean。但是为什么当定义的属性按值而不是按引用“关闭”时,为什么要使用bean?

最佳答案

您需要使用@Value批注来使用属性占位符传递值。 @Autowire希望在applicationContext中存在指定类型的bean。

如果要自动装配值,为什么要在bean定义中传递值?我想你需要的是

<bean id="abstractFormAction" class="staffing.server.action.form.AbstractFormAction" abstract="true" parent="baseAction"><bean>
<bean id="volunteerFormAction" class="staffing.server.action.form.VolunteerFormAction" parent="abstractFormAction">
    <property name="captchaGenerator" ref="captcha"/>
</bean>




@Autowired protected VolunteerSaver volunteerSaver;
@Autowired protected EmailSender emailSender;
@Value("#{form.closed}") protected boolean closed;


如果可以使用component-scan,则无需指定创建bean

您可以将<context:component-scan base-package="<your base package>"/>添加到context.xml文件中,并将注释@Controller添加到控制器文件中

关于java - Spring Autowire原始 boolean 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15042006/

10-11 04:47