Java Spring Autowire基元布尔
我的XML配置包括以下bean定义:Java Spring Autowire基元布尔,java,spring,autowired,Java,Spring,Autowired,我的XML配置包括以下bean定义: <bean id="abstractFormAction" class="staffing.server.action.form.AbstractFormAction" abstract="true" parent="baseAction"> <property name="volunteerSaver" ref="volunteerSaver"/> <property name="emailSender" re
<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>
我在尝试部署时遇到以下异常:
org.springframework.beans.factory.BeanCreationException:错误
正在创建名为“志愿FormAction”的bean:自动连线的注入
依赖关系失败;嵌套异常是
org.springframework.beans.factory.BeanCreationException:无法
autowire字段:受保护的布尔值
staffing.server.action.form.AbstractFormAction.closed;嵌套
例外是
org.springframework.beans.factory.noSuchBean定义异常:否
为依赖项找到了类型为[boolean]的匹配bean:应为
至少有1个bean符合此应用程序的autowire候选
附属国。依赖项批注:
{@org.springframework.beans.factory.annotation.Autowiredrequired=true}
它似乎在抱怨找不到字节布尔的bean。但是,当它通过值而不是引用定义属性“closed”时,为什么它需要一个bean呢?您不应该用@Autowired注释closed
@Autowired指示Spring在您的上下文中查找一个类型为Autowired字段boolean的bean,这就是为什么它抱怨并没有匹配类型为[boolean]的bean的原因
如果从xml配置中注入值,则不需要对该字段进行任何注释。不应使用@Autowired对closed进行注释
@Autowired指示Spring在您的上下文中查找一个类型为Autowired字段boolean的bean,这就是为什么它抱怨并没有匹配类型为[boolean]的bean的原因
如果从xml配置中插入值,则不需要在该字段上进行任何注释。您需要使用注释来使用属性占位符传递值@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>
如果可以使用,甚至不需要指定创建bean
您可以添加到context.xml文件中,并将注释@Controller添加到控制器文件中您需要使用注释使用属性占位符传递值@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>
如果可以使用,甚至不需要指定创建bean
您可以添加到context.xml文件中,并将注释@Controller添加到控制器文件中根据所显示的代码,您加载Spring上下文的方式可能有问题。我的猜测是,您在根web应用程序上下文和控制器应该存在的子上下文中错误地对控制器进行了组件扫描。这意味着将创建该类的两个实例,其中只有一个通过XML进行配置。Spring正在尝试自动连接另一个实例,但由于给定错误而失败。您可以在其他几个SO答案中找到问题和解决方案的描述,例如:
如果您提供有关配置文件和上下文配置的更多详细信息,可能会有人指出您的错误所在。根据您显示的代码,您加载Spring上下文的方式可能有问题。我的猜测是,您在根web应用程序上下文和控制器应该存在的子上下文中错误地对控制器进行了组件扫描。这意味着将创建该类的两个实例,其中只有一个通过XML进行配置。Spring正在尝试自动连接另一个实例,但由于给定错误而失败。您可以在其他几个SO答案中找到问题和解决方案的描述,例如:
如果您提供有关配置文件和上下文配置的更多详细信息,可能会有人指出您的错误所在。如果上下文设置正确,在XML中完全定义bean不会给出指示的错误,因为Spring会看到已经为字段提供了值。如果上下文设置正确,在XML中完全定义bean不会给出指示的错误,因为Spring会看到已经为字段提供了值。
@Autowired protected VolunteerSaver volunteerSaver;
@Autowired protected EmailSender emailSender;
@Value("#{form.closed}") protected boolean closed;