版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章项目运用SpringIoC《JavaEE软件开发案例教程》(Spring+SpringMVC+MyBatis)
目录6.1Spring快速上手☞点击查看本小节知识架构6.2Spring的核心技术——控制反转IoC☞点击查看本小节知识架构6.3基于XML的实例化Bean6.4任务四:基于注解的实例化Bean6.5任务五:零配置实例化Bean6.6项目中SpringIoC的使用☞点击查看本小节知识架构☞点击查看本小节知识架构6.7拓展知识:通过静态工厂方法和实例工厂方法获取Bean
知识架构6.1Spring快速上手6.1.1Spring概述6.1.2SpringIoC依赖6.1Spring快速上手6.1.1Spring概述Spring是分层的JavaEE应用的轻量级开源框架,作为java领域的第一开源项目,诞生到现在已有15个年头。Spring框架最开始的部分是由RodJohnson大叔于2000年为伦敦金融界提供独立咨询业务时撰写。Spring一直致力于最简洁的开发实现与测试,它给我们带来了许多意想不到的优势。l方便解耦,易于开发:通过SpringIoC容器,将对象间的依赖关系交与Spring控制,避免硬编码造成对程序的过度依赖。自从有了Spring,就摆脱了传统的单例模式所带来的重复劳动。l支持AOP编程:通过SpringAOP功能,用户可以灵活方便地实现面向切面地编程替代传统的面向对象编程。l支持声明式事务:用户不必使用重复单调的事务管理代码,通过AOP的声明式事务可以灵活地进行事务管理,提高开发效率和质量。l测试方便l便于集成其他框架l降低了JavaEEAPI的使用难度6.1Spring快速上手---Spring框架模块图SpringCore模块是框架的核心和基础,包括IoC和依赖注入功能。Bean容器实现了BeanFactory,它可以把配置和依赖从实际编码逻辑中解耦。SpringContext模块在Core和Bean模块的基础上建立起来,它以一种类似于JNDI注册的方式来访问对象。Context模块继承自Bean模块,添加了国际化事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持JavaEE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的核心。Spring数据访问层包括DAO,JDBC,ORM和事务处理模块,JDBC模块提供了JDBC抽象层,SpringORM模块是对象关系映射API的集成,包括JPA、JDO和Hibernate等。此事务模块则为实现特殊接口类及所有的POJO支持的编程式和声明式事务管理。SpringWeb层由Web,Web-MVC,Web-Socket和Web-Portlet模块组成,Web模块提供面向web的基本功能和面向web的应用上下文,比如多媒体的文件上传功能、使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端以及Spring远程调用中与web相关的部分。WebMVC模块为web应用提供了模型视图控制(MVC)和RESTWeb服务的实现。Spring的MVC框架可以使业务代码和用户交互表单分离,且可以集成Spring框架的其它所有功能。还有其他重要重要的模块,如SpringAOP,Aspects,SpringAOP模块提供了面向切面的编程实现,实现了使用拦截器和切入点对代码进行干净地解耦,使实现功能的代码与业务代码彻底解耦。Aspects则模块提供了与AspectJ的集成,SpringAOP是一个功能强大且成熟的面向切面编程(AOP)框架。6.1Spring快速上手6.1.2SpringIoC(InverseofControl)依赖项目添加SpringIoC的依赖,只需要引入spring-core.jar及spring-beans.jar文件就可以了。他们包含了访问配置文件、创建和管理JavaBean以及进行InversionofControl/DependencyInjection(IoC/DI)操作相关的所有类。
知识架构6.2Spring的核心技术——控制反转IoC6.2.1IoC思想概述6.2.2SpringIoC实现6.2Spring的核心技术——控制反转IoC6.2.1IoC思想概述IoC(InverseofControl),是由容器控制业务对象之间的依赖关系。而非传统实现中,由程序代码直接操控。这也正是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。IoC思想的前生是DI(DependencyInjection)依赖注入,组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。6.2Spring的核心技术——控制反转IoC6.2.2SpringIoC实现容器:SpringIoC是一个实现了控制反转思想的容器,它通过配置文件beans.xml描述Bean之间的依赖关系,利用java语言的反射(Reflection)机制实例化Bean并建立Bean之间的依赖。SpringIoC容器除了实现上面的底层工作,还提供了Bean实例缓存、生命周期管理、Bean实例代理等高级事务。BeanFactory是Spring框架最核心的接口,它提供了高级IoC的配置机制。它就是IoC容器,BeanFactory是一个非常纯粹的Bean容器,它可以创建并管理各种类的对象。而ApplicationContext称为应用上下文,是BeanFactory的子接口,有时也被称为Spring容器。Spring的应用者面对的是ApplicationContext接口的通用工厂,可以创建并管理各种类的对象。6.2Spring的核心技术——控制反转IoC6.2.2SpringIoC实现容器管理的Bean:所谓Bean,就是一个POJO,普通Java对象,Spring称这些被创建和被管理的对象为Bean。容器需要知道如何创建Bean,如何管理Bean的生命周期,以及Bean之间的依赖关系。Bean的配置信息是Bean的元数据信息, 它由以下4个方面组成:Bean的实现类Bean的属性信息Bean的依赖关系Bean的行为配置
知识架构6.3基于XML的实例化Bean6.3.1任务一:实现属性注入的Bean实例化6.3.2任务二:实现构造方法注入的Bean实例化6.3.3Bean属性的注入参数详解6.3.4Bean的作用域6.3.5延迟初始化Bean6.3基于XML的实例化Bean6.3.1任务一:实现属性注入的Bean实例化【示例6-1】:声明一个小汽车Car的Bean,通过<property>标签注入属性值车型type和最高速度maxSpeed。操作步骤和代码清单请点击查看讲义。演示请点击播放视频。6.3基于XML的实例化Bean6.3.2任务二:实现构造方法注入的Bean实例化【示例6-2】:按类型匹配入参,<constructor-arg>的类型type或者索引index属性加以标明。Car增加一个可设置type和maxSpeed属性的构造函数。packagecom;publicclassCar{......publicCar(Stringtype,intmaxSpeed){this.type=type;this.maxSpeed=maxSpeed;}......}<beanid="tom"class="com.ssm.util.Car"><constructor-argname="type"value="nissan"/><constructor-argname="maxSpeed"value="200"/></bean>6.3基于XML的实例化Bean6.3.3Bean属性的注入参数详解1.基本类型使用<value>注入2.任务三:实现Bean的引用。在下面的【示例6-3】演示Human和Car两个Bean之间如何互相引用。3.集合类型:List,Map,Properties.下面是List集合类型的讲义。6.3基于XML的实例化Bean6.3.4Bean的作用域定义<bean>时,使用scope属性可以指定作用域。例如,如果需要强制Spring每次生成一个新的Bean实例,应该将Bean的scope属性声明为原型。类似地,如果您希望Spring在每次需要时返回相同Bean实例,则应将Bean的scope属性声明为singleton(单例模式)。Spring支持以下五个范围,其中三个范围仅在支持Web的ApplicationContext时才可用。(1)singleTonBean定义范围限定为每个SpringIoC容器的单个实例(默认)。(2)prototypeBean定义范围限定为具有任意数量的对象实例。(3)requestBean定义范围限定为HTTP请求的生命周期。(4)sessionBean定义范围限定为HTTP会话的生命周期。(5)gobalsessionBean定义范围限定为全局HTTP会话的生命周期。6.3基于XML的实例化Bean6.3.5延迟初始化BeanApplicationContext默认会在启动时将所有singletonBean提前实例化。提前实例化方式是一个良好的习惯,这样配置中或者运行环境的错误会被立刻发现。如果你不希望这样,可以将单例Bean定义时加上延迟加载的属性定义防止它提前实例化。延迟初始化Bean的定义会通知SpringIoc容器在第一次需要的时候才实例化而不是在容器启动时就实例化。在XML配置文件中,延迟初始化通过设置<bean/>元素的lazy-init属性为真来实现,比如:<beanid="tom"class="com.ssm.util.Car"scope="prototype"lazy-init="true"><propertyname="type"value="nissan"/><propertyname="maxSpeed"value="300"/></bean>
知识架构6.4任务四:基于注解的实例化Bean6.4任务四:基于注解的实例化Bean基于注解的配置里有三个常用的注入注解@Resource,@Autowired,@Qualifier:@Autowired默认按照Bean的类型装配注入,如果想按名称来装配注入,则需要结合@Qualifier一起使用,由@Qualifier提供bean的名称。@Resource默认按照Bean的名称来装配注入,只有当找不到与名称匹配的Bean才会按照类型来装配注入;@Resource注解由J2EE提供,而@Autowired由Spring提供,故减少系统对Spring的依赖建议使用@Resource的方式;如果Maven项目是1.5的JRE则需换成更高版本。基于Bean的定义时,用到的注解有:@Repository:存储的DAOBean@Service:业务处理Bean@Controller:逻辑控制Bean@Component:上面三种注解不好定义的Bean,统统注解为组件Component【示例6-4】,在前面示例6-3基础上修改,改成基于注解的方式实现Bean的定义和属性值注入:
知识架构6.5任务五:零配置实例化Bean6.5任务五:零配置实例化Bean所谓的零配置就是Spring不再使用beans.xml文件来初始化容器,而使用一个类来替代。在下面的【示例6-5】中,我们使用零配置来实现前面的示例6-4。
知识架构6.6项目中SpringIoC的使用6.6.1WebApplicationContext6.6.2项目使用xml配置的场景6.6.3项目使用注解配置的场景6.6项目中SpringIoC的使用6.6.1WebApplicationContextWebApplicationContext是ApplicaitonContext的实现类,是专门为web应用准备的,他允许从相对于web根目录的路径中装载配置文件完成Bean的实例化的初始工作。从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象将作为属性放置在ServletContext中,以便web应用可以访问spring上下文,spring中提供WebApplicationContextUtils的getWebApplicationContext(ServletContextsrc)方法来获得WebApplicationContext对象。
<!--从类路径下加载Spring配置文件,classpath特指类路径下加载--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mybatis.xml</param-value> </context-param> <!--配置Spring的监听--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>6.6项目中SpringIoC的使用6.6.2项目使用xml配置的场景无论在spring-mvc.xml或者spring-mybatis.xml都有大量Bean的存在,这些Bean都是Spring或者Mybatis库的类创造的。譬如在spring-mvc.xml中有这样的Bean配置:<!--视图渲染--> <beanid="internalResourceViewResolver" class="org.Springframework.web.servlet.view.InternalResourceViewResolver"> <propertyname="prefix"value="/WEB-INF/views/"/> <propertyname="suffix"value=".jsp"/> </bean>6.6项目中SpringIoC的使用6.6.3项目使用注解配置的场景1.基于注解的配置,在我们的项目也被广泛使用。譬如,在spring-mvc.xml文件中,使用xmlns:context="http://www.S/schema/context"声明context的命名空间,然后通过context的component-scan的base-package属性指定需要扫描的基类包。<context:component-scanbase-package="com.ssm"/>定义了自动扫描包的范围是com.ssm。2.在spring-mybatis.xml文件中,也定义了一个自动扫描。com.ssm.dao是DAO接口所在包名,Spring会自动查找其下的类。<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="com.ssm.dao"/><propertyname="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>3.@Controller,@Autowired
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学教学考勤制度
- 小超市考勤制度
- 居家考勤制度
- 工人作息与考勤制度
- 工厂工作考勤制度
- 工地考勤制度范本
- 师德大讲堂考勤制度
- 平煤考勤制度
- 幼儿园校医考勤制度
- 广药职学生考勤制度
- 2025-2026学年山东省泰安市肥城市六年级(上)期末数学试卷(五四学制)(含解析)
- 2026年南京交通职业技术学院单招职业适应性测试题库带答案详解
- 营养与食品安全试题(附答案)
- 苏联的三次改革
- 斐波那契数列与黄金分割+课件-2025-2026学年高二上学期数学人教A版选择性必修第二册
- 地球的公转与四季成因-七年级地理上册教学设计
- 2026年医疗机构医德医风测试题及解析
- 深化数字化教学管理平台与学校招生就业工作的融合创新研究教学研究课题报告
- 2025高二英语冲刺卷
- 留学行业分析和市场分析报告
- 2025-2030中国激光切割行业市场竞争力深度解析及行业未来发展方向与前景规划报告
评论
0/150
提交评论