无责任的烂笔头

Concentrate & enjoy!
posts - 3, comments - 15, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

AnnotationFormatError when using Spring 3.0 & JavaConfig

Posted on 2010-03-18 01:11 BZ 阅读(1549) 评论(0)  编辑  收藏 所属分类: Spring

    Spring 3.0M3及其以后的版本包含了JavaConfig项目提供的大部分功能. 如果你的程序遭遇如下异常:

Exception in thread "main" java.lang.annotation.AnnotationFormatError: Invalid default: public abstract org.springframework.beans.factory.annotation.Autowire

 org.springframework.config.java.annotation.Configuration.defaultAutowire()


    这很可能是因为你在Classpath中添加了JavaConfig项目release出来的包(比如org.springframework.config.java-1.0.0.M4.jar), 而在程序中使用JavaConfigApplicationContext类。查看org.springframework.config.java-1.0.0.M4.jar包的source code, 你会发现org.springframework.config.java.annotation.Configuration类的defaultAutowire的定义如下:

Autowire defaultAutowire() default Autowire.INHERITED;

    而查看org.springframework.beans.factory.annotation.Autowire枚举类,你会发现INHERITED根本就没有定义(只有NO, BY_NAMEBY_TYPE三种)。这就难怪会报错了。

 

    事实上,由于Spring 3.0M3及其以后的版本包含了JavaConfig项目提供的大部分功能,你无需为应用再添加JavaConfig的包。@Configuration, @Bean等都已经被整合到了org.springframework.context.annotation, 从文件来看就是org.springframework.context.jar包。下图展示了一个可运行项目的Classpath配置:


   由于没有了JavaConfig项目release的包, JavaConfigApplicationContext类也就无法找到了,你需要将它替换成org.springframework.context.annotation.AnnotationConfigApplicationContext, 例如:

public static void main(String[] args) {

ApplicationContext context = new

AnnotationConfigApplicationContext(ApplicationConfig.class);

String x = context.getBean("x", String.class);

System.out.println("Got x: " + x);

}


只有注册用户登录后才能发表评论。


网站导航: