Spring2.5注释驱动8.4.1Spring2.5注释驱动注释语法越来越多的被业界所使用,并且注释配置相对于XML配置具有很多的优势:它可以充分利用Java的反射机制获取类结构信息,这些信息可以有效减少配置的工作。注释和Java代码位于一个文件中,而XML配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java代码放在一起,有助于增强程序的内聚性。而采用独立的XML配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。因此在很多情况下,注释配置比XML配置更受欢迎,注释配置有进一步流行的趋势。Spring2.5的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML配置的功能。在使用注释配置之前,先来回顾一下传统上是如何配置Bean并完成Bean之间依赖关系的建立。代码清单1Foo.javaFoo对象有一个String类型的name属性.package;publicclassFoo{privateStringname;publicStringtoStirng(){return"FooNameis:"+this.name;}Set和get方法}代码清单2Bar.javaBar对象有一个String类型的add属性.package;publicclassBar{privateStringadd;publicStringtoStirng(){return"BarAddis:"+this.add;}Set和get方法}代码清单3Main.javaMain对象有两个属性分别是Foo和Barpackage;publicclassMain{privateFoofoo;privateBarbar;publicStringtoString(){return"Main:["++""++"]";}Set和get方法}代码清单4配置文件spring-config-beans.xml
代码清单5Test.javaTest类用于初始化Spring容器并获得main对象package;import;importClassPathXmlApplicationContext;publicclassTest{publicstaticvoidmain(String[]args){String[]locations={"spring-config-beans.xml"};ApplicationContextctx=newClassPathXmlApplicationContext(locations);Mainmain=(Main)ctx.getBean("main");;}}运行Test类控制台输出以下信息:Main:[FooNameis:FooBarAddis:Bar]这说明Spring已经完成了Bean的创建和装配工作。1)使用@Autowired注释Spring2.5引入了@Autowired注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。下面我们来看一下使用@Autowired进行成员变量自动注入的代码:代码清单6使用@Autowired注释的Main.java,此时可以将Main.java类中的set和get方法删除package;import;publicclassMain{@AutowiredprivateFoofoo;@AutowiredprivateBarbar;publicStringtoString(){return"Main:["++""++"]";}}Spring通过一个BeanPostProcessor对@Autowired进行解析,所以要让@Autowired起作用必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessorBean代码清单7修改配置文件当Spring容器启动时,AutowiredAnnotationBeanPostProcessor将扫描Spring容器中所有Bean,当发现Bean中拥有@Autowired注释时就找到和其匹配(默认按类型匹配)的Bean,并将其注入。2)使用@Qualifier注释Spring允许我们通过@Qualifier注释指定注入Bean的名称,这样就不会产生注入错误了,请看下面代码清单:代码清单8修改Main.java类中的foo属性注释增加注释@Qualifier("foo1")publicclassMain{@Autowired@Qualifier("foo1")privateFoofoo;@AutowiredprivateBarbar;publicStringtoString(){return"Main:["++""++"]";}}代码清单9在配置文件中增加id为foo2Bean定义