@Value注释未解决

时间:2013-06-06 06:00:40

标签: java spring maven annotations javabeans

我正在创建MKyong's tutorial.中提到的示例项目我正在使用eclipse。当我创建项目时,我找不到任何方法来编写@Value注释。

我知道这似乎很愚蠢,但我根本无法解决这个问题。你能帮忙吗?

...
import org.springframework.beans.factory.annotation.*;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

@Component ("newSession")
public class Session implements DisposableBean, InitializingBean {

    @Value ("3232")
    private int id;
...

的pom.xml:

...
<properties>
    <spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.6</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <!-- Spring 3 dependencies -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>
....

为不良缩进(大量复制粘贴)和愚蠢的问题道歉。

2 个答案:

答案 0 :(得分:3)

原始答案:

可以在spring-beans jar中找到@org.springframework.beans.factory.annotation.Value注释。将以下依赖项添加到您的pom应该可以解决问题:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>

<强>更新

我认为这个问题只是一个类路径问题。依赖项org.springframework:spring:2.5.6也包含org.springframework.beans.factory.annotation个包,但没有Value注释类。我的假设是eclipse类路径被破坏了。如果你更新类路径(即mvn eclipse:eclipse),你的问题应该得到解决。

你还需要旧的Spring依赖吗?如果没有,则最好将其删除。

顺便说一下,@ BalajiV是绝对正确的,你不需要对spring-beans的显式依赖,因为它将通过spring-context依赖项暂时提取。不得不承认,如果我对来自特定jar(在这种情况下是Value类)的类有编译时依赖性,那么我总是在我的pom中明确定义对该jar的依赖,而不是依赖于另一个派对依赖为我提供。我知道这不太可能发生,但如果在spring-context的未来版本中,他们将依赖关系移除到spring-beans,那么当我升级到更新版本时,我的模块将不再有效。

答案 1 :(得分:0)

如果我们有弹簧 - 将 spring-beans 作为 pom.xml 中的单独依赖项提及 <上下文在其中提到。这将负责下载许多与春天相关的罐子,其中一个是 spring-beans ,这是我们需要使用 @Value 注释。

关于你的问题,它是@Value行的编译错误还是没有注入你的变量的值?我问你这个问题,因为你的代码片段在eclipse中我的示例maven项目上运行正常,你使用的是同一个pom.xml。