AnnotationFormatError when using Spring 3.0 & JavaConfig

    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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值