首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

施用annotation减少xml文件配置

2013-07-09 
使用annotation减少xml文件配置从错误信息中我们可以看到现在MovieFinder有两个bean实现了,一个是jpaMovie

使用annotation减少xml文件配置
从错误信息中我们可以看到现在MovieFinder有两个bean实现了,一个是jpaMovieFinder,另一个是ibatisMovieFinder,spring容器不知道应该使用哪一个bean。这时可以使用注解@Qualifier指定具体的bean。

    //...
  1. @Servicepublic?class?SimpleMovieLister?{
  2. ????@Autowired
  3. ????@Qualifier("ibatisMovieFinder")????private?MovieFinder?movieFinder;
  4. //...

这里我们指定注入的是ibatisMovieFinder这个bean。
运行Main, 控制台上会打印 Hi Arthur! This is IbatisMovieFinder implementation!

Java6提供的注入注解
spring也可以使用java6提供的@Resource注解来指定注入哪一个bean。

    //...
  1. @Servicepublic?class?SimpleMovieLister?{
  2. ????@Resource(name="ibatisMovieFinder")
  3. ????private?MovieFinder?movieFinder;//...

这和@Autowired功能是一致的。

使用注解还是xml
使用注解很方便,但从上面的例子我们也可以看出注解的问题,MovieFinder有两个实现,SimpleMovieLister是在程序中用注解指定了使用哪一个实现,如果要修改,需要修改源程序。所以,注解只适用于固定依赖的情况。如果依赖需要在部署的时候做调整,那还是使用xml的配置方式方便,毕竟只需要修改一下xml文件即可。

实际使用时,我们可以xml和注解两种方式混合使用。

    <?xml?version="1.0"?encoding="UTF-8"?>
  1. <beans?xmlns="http://www.springframework.org/schema/beans"???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. ???????xmlns:context="http://www.springframework.org/schema/context"???????xsi:schemaLocation="http://www.springframework.org/schema/beans?
  3. ???????????http://www.springframework.org/schema/beans/spring-beans-2.5.xsd???????????http://www.springframework.org/schema/context
  4. ???????????http://www.springframework.org/schema/context/spring-context-2.5.xsd">???????????????
  5. ????<context:component-scan?base-package="test1"/>????
  6. ????<bean?id="simpleMovieLister1"?class="test1.SimpleMovieLister">????????<property?name="movieFinder"?ref="jpaMovieFinder"?/>
  7. ????</bean>????
  8. </beans>

使用xml配置方式定义了另外一bean,注入了jpaMovieFinder这个实现。

    package?test1;
  1. import?org.springframework.context.ApplicationContext;
  2. import?org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public?class?Main?{
  4. ????public?static?void?main(String[]?args)?{????????ApplicationContext?context?=?new?ClassPathXmlApplicationContext("test1/beans.xml");
  5. ????????SimpleMovieLister?m?=?(SimpleMovieLister)context.getBean("simpleMovieLister");????????System.out.println(m.getData("Arthur"));
  6. ????????SimpleMovieLister?m1?=?(SimpleMovieLister)context.getBean("simpleMovieLister1");????????System.out.println(m1.getData("Arthur"));
  7. ????}
  8. }

simpleMovieLister是从注解来的,simpleMovieLister1是从xml配置来的。运行结果:
Hi Arthur! This is IbatisMovieFinder implementation!
Hi Arthur! This is JpaMovieFinder implementation!

证明混合使用是可行的,你可以继续测试,用xml重新配置simpleMovieLister。
因此,即使我一开始使用了注解,之后我后悔了,没有关系,不用修改源程序,以前用xml怎么配置现在还是怎么配置。

热点排行