gpt4 book ai didi

java - Autowired 属性不起作用,但 autowired setter 是?

转载 作者:行者123 更新时间:2023-11-30 06:21:51 25 4
gpt4 key购买 nike

我在 Spring 3.2.2 项目中有以下 bean 类:

@Service
public class PropertyFacade {

// This DOES NOT work
@Autowired
private String propertyFileName;

// This DOES work
// @Autowired
// public void setPropertyFileName( String propertyFileName ) {
// this.propertyFileName = propertyFileName;
// }

我的 spring 配置文件包含以下内容:

<context:component-scan base-package="org.sperbolink.utility" />
<context:component-scan base-package="org.sperbolink.facade" />

<bean id="propertyFacade" class="org.sperbolink.facade.PropertyFacade" >
<property name="propertyFileName" value="test-properties.inf" />
</bean>

我的调用方法如下:

    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext( "spring-config-test.xml" );
BeanFactory factory = classPathXmlApplicationContext;
PropertyFacade propertyFacade = ( PropertyFacade ) factory.getBean( "propertyFacade" );

出于某种原因,当我尝试 Autowiring 该属性时,出现错误:

springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.String org.sperbolink.facade.PropertyFacade.propertyFileName; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.

但是,当我 Autowiring setter 时,一切正常。为什么属性 Autowiring 不起作用?

最佳答案

异常消息告诉您确切问题是什么:

您没有propertyFileName bean 定义在任何地方。你只有属性(property) propertyFileNamebean 中定义 propertyFacade .如果您没有二传手,这将不起作用。

根据您的设置,propertyFileNametest-properties.inf自动注入(inject)到propertyFacade中的适当字段中类(class)。没有 @Autowire这里需要注释。

@Autowire当你想注入(inject)一个(某处定义的)<bean> 时,可以使用 with 字段进入一个特定的领域。这不应该与使用 <property> 混合使用.

阅读更多 Spring docs .

关于java - Autowired 属性不起作用,但 autowired setter 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com