Posted on 2010-03-18 01:11
BZ 阅读(1565)
评论(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_NAME和BY_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);
}
|