没有合适的资源?快使用搜索试试~ 我知道了~
spring注解使用详解
5星 · 超过95%的资源 需积分: 9 94 下载量 186 浏览量
2009-08-28
12:41:38
上传
评论
收藏 122KB DOC 举报
温馨提示
试读
17页
基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置 Bean、装配 Bean 的功能,您可以使用基于注释的 Spring IoC 替换原来基于 XML 的配置
资源推荐
资源详情
资源评论
spring2.5
注解驱动 ( 一 )
概述
注释配置相对于 XML 配置具有很多的优势:
它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。如使用 JPA
注释配置 ORM 映射时,我们就不需要指定 PO 的属性名、类型等信息,如果关系表字段和 PO 属性
名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过 Java 反射机制获取。
注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完
成后都不会调整,如果配置信息和 Java 代码放在一起,有助于增强程序的内聚性。而采用独立的
XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上
的不连贯会降低开发效率。
因此在很多情况 下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。Spring 2.5 的
一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分 XML 配置的功能。在这篇
文章里,我们将向您讲述使用注释进行 Bean 定义和依赖注入的内容。
原来我们是怎么做的
在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立。下
面是 3 个类,它们分别是 Oce、Car 和 Boss,这 3 个类需要在 Spring 容器中配置为 Bean:
Oce 仅有一个属性:
清单 1. Oce.java
Java 代码
1. packagecom.baobaotao;
2. publicclassOce{
3. privateStringoceNo=”001”;
4.
5. //省略 get/setter
6.
7. @Override
8. publicStringtoString(){
9. return"oceNo:"+oceNo;
10. }
11. }
Car 拥有两个属性:
清单 2. Car.java
Java 代码
1. packagecom.baobaotao;
2.
3. publicclassCar{
4. privateStringbrand;
5. privatedoubleprice;
6.
7. //省略 get/setter
8.
9. @Override
10. publicStringtoString(){
11. return"brand:"+brand+","+"price:"+price;
12. }
13. }
Boss 拥有 Oce 和 Car 类型的两个属性:
清单 3. Boss.java
Java 代码
1. packagecom.baobaotao;
2.
3. publicclassBoss{
4. privateCarcar;
5. privateOceoce;
6.
7. //省略 get/setter
8.
9. @Override
10. publicStringtoString(){
11. return"car:"+car+"\n"+"oce:"+oce;
12. }
13. }
我们在 Spring 容器中将 Oce 和 Car 声明为 Bean,并注入到 Boss Bean 中:下面是使用传统
XML 完成这个工作的配置文件 beans.xml:
清单 4. beans.xml 将以上三个类配置成 Bean
Java 代码
1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <beansxmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://www.springframework.org/schema/beans
5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
6. <beanid="boss"class="com.baobaotao.Boss">
7. <propertyname="car"ref="car"/>
8. <propertyname="oce"ref="oce"/>
9. </bean>
10. <beanid="oce"class="com.baobaotao.Oce">
11. <propertyname="oceNo"value="002"/>
12. </bean>
13. <beanid="car"class="com.baobaotao.Car"scope="singleton">
14. <propertyname="brand"value="红旗 CA72"/>
15. <propertyname="price"value="2000"/>
16. </bean>
17. </beans>
当我们运行以下代码时,控制台将正确打出 boss 的信息:
清单 5. 测试类:AnnoIoCTest.java
Java 代码
1. importorg.springframework.context.ApplicationContext;
2. importorg.springframework.context.support.ClassPathXmlApplicationContext;
3. publicclassAnnoIoCTest{
4.
5. publicstaticvoidmain(String[]args){
6. String[]locations={"beans.xml"};
7. ApplicationContextctx=
8. newClassPathXmlApplicationContext(locations);
9. Bossboss=(Boss)ctx.getBean("boss");
10. System.out.println(boss);
11. }
12. }
这说明 Spring 容器已经正确完成了 Bean 创建和装配的工作。
使用 @Autowired 注释
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动
装配的工作。来看一下使用 @Autowired 进行成员变量自动注入的代码:
清单 6. 使用 @Autowired 注释的 Boss.java
Java 代码
1. packagecom.baobaotao;
2. importorg.springframework.beans.factory.annotation.Autowired;
3.
4. publicclassBoss{
5.
6. @Autowired
7. privateCarcar;
8.
9. @Autowired
10. privateOceoce;
11.
12. …
13. }
Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用
必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。
清单 7. 让 @Autowired 注释工作起来
Java 代码
1. <?xmlversion="1.0"encoding="UTF-8"?>
2. <beansxmlns="http://www.springframework.org/schema/beans"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://www.springframework.org/schema/beans
5. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
6.
7. <!--该 BeanPostProcessor将自动起作用,对标注 @Autowired的 Bean进行自动注入 -->
8. <beanclass="org.springframework.beans.factory.annotation.
9. AutowiredAnnotationBeanPostProcessor"/>
10.
11. <!--移除 bossBean的属性注入配置的信息 -->
12. <beanid="boss"class="com.baobaotao.Boss"/>
13.
14. <beanid="oce"class="com.baobaotao.Oce">
15. <propertyname="oceNo"value="001"/>
16. </bean>
17. <beanid="car"class="com.baobaotao.Car"scope="singleton">
18. <propertyname="brand"value="红旗 CA72"/>
19. <propertyname="price"value="2000"/>
20. </bean>
21. </beans>
这样,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中
所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的
Bean,并注入到对应的地方中去。
按照上面的配置,Spring 将直接采用 Java 反射机制对 Boss 中的 car 和 oce 这两个私有成员变量
进行自动注入。所以对成员变量使用 @Autowired 后,您大可将它们的 setter 方法(setCar() 和
setOce())从 Boss 中删除。
剩余16页未读,继续阅读
资源评论
- xiaogang_ok2014-03-27很好,讲解很详细,谢谢
zjx464
- 粉丝: 5
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功