2013-06-06 82 views
2

我正在创建一个示例项目,如MKyong's tutorial.中所述我正在使用eclipse。当我创建该项目时,我找不到任何编写@Value注释的方法。@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

原来的答案:

@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,那么当我升级到新版本时,我的模块将不再工作。

+0

是的,2.5.6是麻烦包。现在我该如何解决问题了? 'mvn eclipse:eclipse'没有解决问题。 – SiddharthaRT

+0

为什么你需要org.springframework:spring:2.5.6 dependency?你不能简单地从你的pom中完全删除它吗?项目是否在Eclipse之外构建(即从命令行执行'mvn install'工作?)从Eclipse内部你尝试刷新(右键单击项目并选择刷新)并清理(项目 - >清理...)项目? – DB5

+0

那么,我删除它,它的作品。很显然,我从mkyong的网站上复制粘贴的作品导致了这个问题 - 有点过时了。 – SiddharthaRT

0

这是必须有弹簧豆在的pom.xml单独的依赖性提到,如果我们有春天上下文在它提到。这将照顾下载许多春季相关的罐子,其中之一是春豆这就是我们需要使用的@价值注释。

关于你的问题,它是@Value行上的编译错误,还是值没有被注入到你的变量?我问你这个问题,因为你的代码片段可以在eclipse中的示例maven项目上正常工作,这与你在这里给出的pom.xml相同。

+0

错误在编译期间。是的,即使我认为在pom.xml中提到spring-context也足够了。 – SiddharthaRT

+1

@SiddharthaRT,我已经更新了我的答案。由于org.springframework:spring:2.5.6依赖关系,因为它包含org.springframework.beans.factory.annotation包,但没有Value类,所以我认为类路径有些问题。这将解释为什么你得到一个编译错误,指出无法找到值。 此外你如何建立你的模块?你可以尝试在eclipse之外构建(从一个控制台,mvn clean install应该做的伎俩),看看它是否成功。 – DB5

+0

我可以使用哪种其他版本的弹簧? – SiddharthaRT