我的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/