SSH轻量级框架实践课件:Spring DI详解_第1页
SSH轻量级框架实践课件:Spring DI详解_第2页
SSH轻量级框架实践课件:Spring DI详解_第3页
SSH轻量级框架实践课件:Spring DI详解_第4页
SSH轻量级框架实践课件:Spring DI详解_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringDI详解本章目标了解SpringDI机制的基本原理掌握Spring注入依赖对象的方式了解Spring集合类型的装配掌握注解方式注入依赖对象本章简介在上一章中,我们学习Spring框架的基本概念,知道了Spring框架的搭建方式,也简单了解了Spring框架的核心组成结构。它的“依赖注入(DependencyInjection,DI)”模式和“面向方面编程(Aspect-Orientedprogramming,AOP)”带给了编程者极大的方便。在这一章中,我们将进一步讲解Spring“依赖注入”的方式。被注入的对象都可以是什么样的数据类型?注入的形式又是怎样的?什么又是手工装配方式和自动装配?这些问题都将在本章中得到解决。SpringDI原理举例假设有一个类Person,另一个类Car,如果Person的开车方法drive()需要引用Car,则称Person类依赖于Car类。延伸到对象,这种依赖关系依然成立,比如说Person类的对象boy依赖于Car类的对象toyota。Spring的DI机制Spring从核心而言,是一个DI容器,其设计哲学是提供一种无侵入式的高扩展性框架。即无需代码中涉及Spring专有类,即可将其纳入Spring容器进行管理。为了实现无侵入性的目标。Spring大量引入了Java的Reflection(反射)机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。org.springframework.beans包中包括了这些核心组件的实现类,核心中的核心为BeanWrapper和BeanFactory类。Spring注入依赖对象的方式Spring注入基本类型对象时,可以采用构造器注入和属性setter方法注入两种方式,<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="***://***springframework***/schema/beans" xmlns:xsi="***://***w3***/2001/XMLSchema-instance" xsi:schemaLocation="***://***springframework***/schema/beans***://***springframework***/schema/beans/spring-beans-2.5.xsd"> <beanid="orderService"class="com.xtgj.j2ee.chapter09.demo.OrderServiceBean"> <!--构造器注入--> <constructor-argindex="0"type="java.lang.String"value="xxx"/> <!--属性setter方法注入--> <propertyname="name"value="zhao"/> </bean></beans>注解方式注入依赖对象利用Spring配置文件的配置方式注入依赖对象简单易懂,操作方便,那么还有没有更加简洁的方式能够实现这一功能呢?继Spring2.0对SpringMVC进行重大升级后,Spring2.5又为SpringMVC引入了注解驱动功能。基于注解的配置有越来越流行的趋势,使用Spring的注解,我们无须让Controller继承任何接口,无需在XML配置文件中定义请求和Controller的映射关系,仅仅使用注解就可以让一个POJO具有Controller的绝大部分功能——SpringMVC框架的易用性得到了进一步的增强。在框架灵活性、易用性和扩展性上,SpringMVC已经全面超越了其他的MVC框架,伴随着Spring一路高唱猛进,可以预见SpringMVC在MVC市场上的吸引力将越来越不可抗拒。接下来,我们就从采用注解方式注入依赖对象说起。这里,可以采用手工装配或自动装配两种方式注入依赖对象,当然,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。手工装配依赖对象引入@Autowired注解(不推荐使用,建议使用@Resource)类的实现(对成员变量进行标注)。例如,在上一节中,我们曾经向OrderServiceBean类中注入过OrderDaoBean的对象,用@Autowired注解便可以这样实现:@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解)。Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。@Resource装配顺序如下如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型(orderDao)进行匹配,如果匹配则自动装配;自动装配依赖对象autowire属性取值如下:byType:按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的bean。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为null。byName:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。constructor:与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。Spring2.5还为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进Spring容器中管理。它的作用和在XML文件中使用bean节点配置组件是一样的。下面我们将介绍如何注解Bean,从而从XML配置文件中完全移除Bean定义的配置。Repository@Repository用于标注数据访问组件,即DAO组件@Repository("orderDao")publicclassOrderDaoBean{ publicvoidsave(){ System.out.println("saveorder"); }}Service@Service用于标注业务层组件@Service("orderService")publicclassOrderServiceBean{ @Resource privateOrderDaoBeanorderDao;}Controller@Controller用于标注控制层组件(如Struts中的Action)@Controller("order")publicclassOrderAction{ @Resource privateOrderServiceBeanorderService;}Spring配置文件这里必须提到的是,我们使用上述注解的前提是必须让这些注解工作起来,具体的实现方式是在Spring配置文件中加入如下设置:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="***://***springframework***/schema/beans" xmlns:xsi=***://***w3***/2001/XMLSchema-instancexmlns:context="***://***springframework***/schema/context" xsi:schemaLocation="***://***springframework***/schema/beans***://***springframework***/schema/beans/spring-beans-2.5.xsd

***://***springframework***/schema/context***://***springframework***/schema/context/spring-context-2.5.xsd">

<context:component-scanbase-package="com.xtgj.j2ee.chapter09"/></beans>Spring过滤方式Spring支持以下4种类型的过滤方式:注解org.example.SomeAnnotation将所有使用SomeAnnotation注解的类过滤出来类名指定org.example.SomeClass过滤指定的类正则表达式com\.kedacom\.spring\.annotation\.web\..*通过正则表达式过滤一些类AspectJ表达式org.example..*Service+通过AspectJ表达式过滤一些类总结Spring大量引入了Java的Reflection(反射)机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。Spring注入基本类型对象时,可以采用构造器注入和属性setter方法注入两种方式。基于注解的配置有越来越流行的趋势,使用Spring的注解,我们无须让Con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论