无法在 Spring 中使用 @Value 从属性中获取值

Cannot get value from properties using @Value in Spring

我有一个使用 spring 的项目模板,我需要属性文件中的值,但是当我 运行 程序时,该值为空。这是我的代码: 属性文件包含:TOWN=Cluj

    public class BaseTest {

           @Value("${TOWN}")
           public String stringValue;

           @BeforeTest
           public void beforeTest(){
               ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
               Student student =  context.getBean("studentBean", Student.class);
               student.displayName();
               student.displayTown();

               System.out.println(stringValue); // -> this is null
           }
       }

Beans 文件:

        <beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:context="http://www.springframework.org/schema/context"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">

            <context:property-placeholder location="classpath:stable.properties"/>
            <context:component-scan base-package="com.base" />

            <bean name="studentBean" class="com.model.Student">
                <property name="name" value="MyName"/>
                <property name="town" value="${TOWN}"/>
            </bean>

        </beans>
        public class Student {
            private String name;
            private String town;

            public String getName(){
                return name;
            }

            public void setName(String name){
                this.name = name;
            }

            public String getTown() {
                return town;
            }

            public void setTown(String town) {
                this.town = town;
            }

            public void displayName(){
                System.out.println("Name: " + name);
            }

            public void displayTown(){
                System.out.println("Town: " + town);
            }

        }

在 BaseTest 中,当调用 displayTown() 方法时,属性文件中的值有效,但如果尝试将该值用作 BaseTest 中的变量,则值为空。 你能帮帮我吗?

正如您所确认的那样 BaseTest 只是一个正常的 class。不会自动注入值。

在xml

<context:property-placeholder location="classpath:stable.properties"/>

它会自动配置 PropertyPlaceholderConfigurer,它会替换 ${} 占位符,这些占位符是根据指定的属性文件解析的。

<context:component-scan base-package="com.base" />

Scans the classpath for annotated components that will be auto-registered as Spring beans. By default, the Spring-provided @Component, @Repository, @Service, @Controller, @RestController, @ControllerAdvice, and @Configuration stereotypes will be detected.

<bean name="studentBean" class="com.model.Student">
    <property name="name" value="MyName"/>
    <property name="town" value="${TOWN}"/>
</bean>

对于 Student class nametown 字段将从 属性 文件

中自动选取

请注意,这只会发生在 Student class。

您正在尝试的是在 BaseTest class 中获取价值,这只是 class.

要么像这样定义一个 bean 为 BaseTest class 注入 属性

<bean name="baseTestBean" class="classpath.BaseTest">
    <property name="stringValue" value="${TOWN}"/>
</bean>

你在 class

中不需要 @Value("${TOWN}")

添加任何一个配置,它会自动扫描你的class,前提是它在com.base