ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:24.99KB ,
资源ID:19335395      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19335395.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(spring注解详解Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

spring注解详解Word格式.docx

1、 public String toString() return officeNo: + officeNo; Car 拥有两个属性:清单 2. Car.javapublic class Car private String brand; private double price; / 省略 get/setterbrand: + brand + , + price: + price;Boss 拥有 Office 和 Car 类型的两个属性:清单 3. Boss.javapublic class Boss private Car car; private Office office;car: +

2、car + noffice: + office;我们在 Spring 容器中将 Office 和 Car 声明为 Bean,并注入到 Boss Bean 中:下面是使用传统 XML 完成这个工作的配置文件 beans.xml:清单 4. beans.xml 将以上三个类配置成 Beanbeans xmlns=http:/www.springframework.org/schema/beans xmlns:xsi=/www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=/www.springframework.org/schema/beans

3、 http:/www.springframework.org/schema/beans/spring-beans-2.5.xsd office /beancom.baobaotao.OfficeofficeNo value=002com.baobaotao.Car scope=singletonbrand 红旗 CA72price2000/beans当我们运行以下代码时,控制台将正确打出 boss 的信息:清单 5. 测试类:AnnoIoCTest.javaimport org.springframework.context.ApplicationContext;import org.spri

4、ngframework.context.support.ClassPathXmlApplicationContext;public class AnnoIoCTest public static void main(String args) String locations = beans.xml; ApplicationContext ctx = new ClassPathXmlApplicationContext(locations); Boss boss = (Boss) ctx.getBean(); System.out.println(boss);这说明 Spring 容器已经正确完

5、成了 Bean 创建和装配的工作。使用 Autowired 注释Spring 2.5 引入了 Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。来看一下使用Autowired 进行成员变量自动注入的代码:清单 6. 使用 Autowired 注释的 Boss.javaimport org.springframework.beans.factory.annotation.Autowired; Autowired Spring 通过一个 BeanPostProcessor 对 Autowired 进行解析,所以要让Autowired 起作用必须事先在 Spr

6、ing 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。清单 7. 让 Autowired 注释工作起来!- 该 BeanPostProcessor 将自动起作用,对标注 Autowired 的 Bean 进行自动注入 -bean class=org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor- 移除 boss Bean 的属性注入配置的信息 -001这样,当 Spring 容器启动时,AutowiredAnnotationBeanP

7、ostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。按照上面的配置,Spring 将直接采用 Java 反射机制对 Boss 中的 car 和 office 这两个私有成员变量进行自动注入。所以对成员变量使用Autowired 后,您大可将它们的 setter 方法(setCar() 和 setOffice()从 Boss 中删除。当然,您也可以通过 Autowired 对方法或构造函数进行标注,来看下面的代码:清单 8. 将 Autowired 注释标注在

8、 Setter 方法上 public void setCar(Car car) this.car = car; public void setOffice(Office office) this.office = office;这时,Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。而下面的使用方法则对构造函数进行标注:清单 9. 将 Autowired 注释标注在构造函数上 public Boss(Car car ,Office office) this.office = office ;由于 Boss() 构造函数有两个入参,分别是 car 和

9、 office,Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为Boss(Car car ,Office office) 的入参来创建 Boss Bean。当候选 Bean 数目不为 1 时的应对方法在默认情况下使用 Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。我们可以来做一个实验:清单 10. 候选 Bean 数目为 0 时/www.springframework.o

10、rg/schema/beans/spring-beans-2.5.xsd - 将 office Bean 注释掉 - 由于 office Bean 被注释掉了,所以 Spring 容器中将没有类型为 Office 的 Bean 了,而 Boss 的office 属性标注了 Autowired,当启动 Spring 容器时,异常就产生了。当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。来看一下具体的例子:清单 11

11、. 使用 Autowired(required = false)import org.springframework.beans.factory.annotation.Required; Autowired(required = false)当然,一般情况下,使用 Autowired 的地方都是需要注入 Bean 的,使用了自动注入而又允许不注入的情况一般仅会在开发期或测试期碰到(如为了快速启动 Spring 容器,仅引入一些模块的 Spring 配置文件),所以Autowired(required = false) 会很少用到。和找不到一个类型匹配 Bean 相反的一个错误是:如果 Spri

12、ng 容器中拥有多个候选 Bean,Spring 容器在启动时也会抛出 BeanCreationException 异常。来看下面的例子:清单 12. 在 beans.xml 中配置两个 Office 类型的 Bean office2我们在 Spring 容器中配置了两个类型为 Office 类型的 Bean,当对 Boss 的 office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。Spring 允许我们通过 Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常:清单 13. 使用 Qualifi

13、er 注释指定注入 Bean 的名称Autowiredpublic void setOffice(Qualifier()Office office) Qualifier() 中的 office 是 Bean 的名称,所以 Autowired 和Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。Autowired 可以对成员变量、方法以及构造函数进行注释,而Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 Autowired 和Qualifier 统一成一个注释类。下面是对成员变量和构造函

14、数入参进行注释的代码:对成员变量进行注释:清单 14. 对成员变量使用 Qualifier 注释 Qualifier()对构造函数入参进行注释:清单 15. 对构造函数变量使用 Qualifier 注释 public Boss(Car car , Qualifier()Office office)Qualifier 只能和 Autowired 结合使用,是对 Autowired 有益的补充。一般来讲,Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。使用 JSR-250 的注释Spring 不但支持自己定义的 Autowired 的注释,还支持几个由

15、 JSR-250 规范定义的注释,它们分别是 Resource、PostConstruct 以及 PreDestroy。ResourceResource 的作用相当于 Autowired,只不过 Autowired 按 byType 自动注入,面Resource 默认按 byName 自动注入罢了。Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将Resource 注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用

16、 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。Resource 注释类位于 Spring 发布包的 lib/j2ee/common-annotations.jar 类包中,因此在使用之前必须将其加入到项目的类库中。来看一个使用Resource 的例子:清单 16. 使用 Resource 注释的 Boss.javaimport javax.annotation.Resource; / 自动注入类型为 Car 的 Bean Resource / 自动注入 bean 名称为 office 的 Bean Resou

17、rce(name = 一般情况下,我们无需使用类似于 Resource(type=Car.class) 的注释方式,因为 Bean 的类型信息可以通过 Java 反射从代码中获取。要让 JSR-250 的注释生效,除了在 Bean 类中标注这些注释外,还需要在 Spring 容器中注册一个负责处理这些注释的 BeanPostProcessor:bean org.springframework.context.annotation.CommonAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessor 实现了 BeanPostProc

18、essor 接口,它负责扫描使用了 JSR-250 注释的 Bean,并对它们进行相应的操作。PostConstruct 和 PreDestroySpring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,笔者在精通 Spring 2.x企业应用开发精解第 3 章进行了详细的描述,有兴趣的读者可以查阅。JSR-250 为初始化之后/销毁之前方法的指定定义了两个注释类,分别是 PostConstruct 和 PreDestroy,这两个注释只能应用于方法上。标注了 PostConstruct 注释的方法将在类实例化后调用,而标注了 PreDestroy 的方法将在类销毁之前调用。清单 17. 使用 PostConstruct 和 PreDestroy 注释的 Boss.javaimport javax.annotation.Resour

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1