收藏 分享(赏)

三大框架计算机软件及应用it计算机专业资料PPT课件.ppt

上传人:微传9988 文档编号:2151185 上传时间:2018-09-02 格式:PPT 页数:64 大小:1.62MB
下载 相关 举报
三大框架计算机软件及应用it计算机专业资料PPT课件.ppt_第1页
第1页 / 共64页
三大框架计算机软件及应用it计算机专业资料PPT课件.ppt_第2页
第2页 / 共64页
三大框架计算机软件及应用it计算机专业资料PPT课件.ppt_第3页
第3页 / 共64页
三大框架计算机软件及应用it计算机专业资料PPT课件.ppt_第4页
第4页 / 共64页
三大框架计算机软件及应用it计算机专业资料PPT课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、SSH三大框架,SSH三大框架,Web层 Struts2框架,Ssh框架图解,业务层 Spring框架,持久层 Hibernate,数据库,Hibernate,Hibernate简介。 Hibernate的Xml配置方法。 Hibernate应用步骤。 主键生成机制。,Hibernate简介?,Hibernate是对象/关系映射(ORM)的解决方案。-hibernate是java和关系型数据库的桥梁,负责java对象和关系数据的映射。-hibernate是一个开源的对象关系型映射框架,它对jdbc进行了非常轻量级的对象封装。-hibernate的目标是成为java平台管理数据持久问题的完整解决

2、方案。-使java开发人员更加专注于业务的熟悉和处理,而非对数据库的基本操做,同时让开发人员以面对对象的思想操作数据库Hibernate原理就是利用了ORM映射机制。他的本质就是将数据从一种形式转换成另一种形。就是将对象模型中的实体类存入关系模型中,实体中类对应关系模型中中的一个表,实体类中的属性对应表中的一个列,实体类的一个实对应数据库的一条记录。 。,Hibernate结构,简单介绍hibernate的结构,hibernate简介,- Hibernate是一个优秀的java持久层的解决方案-是是当今主流的对象关系型映射工具-Hibernate简化了jdbc繁琐的代码- Hibernate将

3、数据库的链接信息都放在配置文件中,Hibernate配置的两种方法,1.属性文件(Hibernate.properties) 调用代码: Configuration conf = new Configuration(); 2.Xml文件(Hibernate.cfg.xml) 调用代码: Configuration conf = new Configuration().configure();,Hibernate配置文件的书写,Hibernate.cfg.xml,Hibernate映射文件的书写,Student.hbm.xml,Hibernate常用的主键生成策略,1:assigned -表示在

4、新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。 其缺点为在执行新增操作时,需查询数据库判断生成的主键是否已经存在。 2:increment -表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。 (1)新增数据前先查询一遍,影响了性能。 (2)主键的类型只能为数值型的int或者long (3)并发操作时的冲突问题。 3:identity -不如说是为sqlerver数据库

5、量身定做的。主要适用于sqlserver数据库的自动增长列的表。 4:native -表示根据不同的数据库采用不同的主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用 5. sequenceDB2、Oracle均支持的序列,用于为long、short或int生成唯一标识,Hibernate 关联关系映射,1:一对一关联 2:一对多关联 3:多对多关联,创建一个Hibernate的步骤,1.创建一个web项目,导入Hibernate所需要的.jar包 2.在数据库中创建表格, 3.创建对应的pojo类,4.创建Hibernate.hbm.xnl

6、配置文件配置数据库相关属性 5.创建对应pojo类的映射文件,与数据库中的表对应,Hibernate常用的接口,1.Configuration接口 configuration对象用于加载解析配置文件启动Hibernate,然后创建SessionFactory实例 2.SessionFactory接口 一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获取Session实例 。SessionFactory有以下特点: 1.它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。 2.它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问

7、一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。 之所以称SessionFactory是重量级的,因为它需要一个很大的缓存,用来存放预定义的SQL语句及映射元数据等。用户还可以为SessionFactory配置一个缓存插件,这个缓存插件被称为Hibernate的二级缓存,该缓存用来存放被工作单位读过的数据,将来其他工作单元可能会重用这些数据,因此这个缓存中的数据能被所有的工作单元共享。一个工作单元通常对应一个数据库事务。,Hibernate常用的接口,3.Se

8、ssion接口 Session用来操作数据库; session接口是Hibernate应用中最广泛的接口。Session也被称为持久化管理器。它提供了和持久化相关的操作。Session有以下特点: 1.它不是线程安全的,因此在设计软件架构的时候,应该避免多个线程共享一个Session实例。 2.Session实例是轻量级的,所谓轻量级,是指它的创建和销毁不需要消耗过多的资源。这意味着在程序中可以经常地创建或者销毁Session对象,如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。 session有一个缓存,被称为Hibernate的第一级缓存,它存

9、放被当前工作单元加载的对象,每个Session实例都有自己的缓存,这个Session实例的缓存只能被当前的工作单元访问。 4.Transaction接口 Transaction接口是Hibernate的数据库的数据库事务接口,它对底层的事务接口做了封装。底层事务接口包括: 1.jdbc API 2.JTA(JAVA Transation API) 3.CORBA(Common Object Request Broker Architecture) API 5.Query和Criteria查询数据,Hibernate操作数据库,1 读取并解析配置文件Configuration conf = ne

10、w Configuration().configure(); 2 读取并解析映射信息,创建SessionFactorySessionFactory sf = conf.buildSessionFactoty(); 3 打开SessionSession session = sf.openSession;/sf.getCurrentSession(); 4 开始一个事务(增删改操作必须,查询操作可选)Transaction tx = session.beginTransaction(); 5 数据库操作session.sava(); /实现添加功能 6 提交事务(回滚事务)mit();(tx.ro

11、llback();) 7 关闭sessionsession.close();,Hibernate缓存机制,1.Hibernate缓存机制分为一级缓存和二级缓存Session 的缓存被称为hibernate的第一级缓存。默认是开启的。 SessionFactory的外置缓存称为hibernate 的二级缓存。这两个缓存都位于持久层,它们存放的都是数据库数据的拷贝。SessionFactory的内置缓存 存放元数据和预定义SQL, SessionFactory的内置缓存是只读缓存。,Session 缓存的三大作用,1,减少数据库的访问频率,提高访问性能。2,保证缓存中的对象与数据库同步,位于缓存中

12、的对象称为持久化对象。3,当持久化对象之间存在关联时,Session 保证不出现对象图的死锁,缓存配置文件中的属性说明, 设置缓存数据文件的存放目录 设置缓存的默认数据过期策略 设定具体的命名缓存的数据过期策略 每个命名缓存代表一个缓存区域,每个缓存区域有各自的数据过期策略。命名缓存机制使得用户能够在每个类以及类的每个集合的粒度上设置数据过期策略。 cache元素的属性 name 设置缓存的名字,它的取值为类的全限定名或类的集合的名字 maxInMemory 设置基于内存的缓存中可存放的对象最大数目 eternal 设置对象是否为永久的,true表示永不过期,此时将忽略timeToIdleSe

13、conds和timeToLiveSeconds属性; 默认值是false timeToIdleSeconds 设置对象空闲最长时间,超过这个时间,对象过期。当对象过期时,EHCache会把它从缓存中清除。 如果此值为0,表示对象可以无限期地处于空闲状态。 timeToLiveSeconds 设置对象生存最长时间,超过这个时间,对象过期。 如果此值为0,表示对象可以无限期地存在于缓存中。 overflowToDisk 设置基于内在的缓存中的对象数目达到上限后,是否把溢出的对象写到基于硬盘的缓存中,Session 什么时候清理缓存?,1,commit()方法被调用时 2,查询时会清理缓存,保证查询

14、结果能反映对象的最新状态。 3,显示的调用session 的 flush方法,Struts2,Struts2简介,Struts2是一个web框架,一个mvc框架 Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。Struts 2框架本身大致可以分为3个部分:核心控制器Filt

15、erDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件工作原理,Struts2原理,在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对

16、于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation

17、实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.x

18、ml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。 6、返回HTTP响应到客户端浏览器。 ,供核心控制器FilterDispatcher来使用,Struts2的处理流程,StrutsPrepareAndExecuteFilter,Interceptor,Action,Result,Jsp/html,用户请求,Struts2内置的一些拦截器或用户自定义拦截器,用户编写的action

19、类,类似struts1中的Action,类似struts1中的forward,响应,StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中

20、的Action是线程安全的。,搭建Struts2开发环境,搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1找到开发Struts2应用需要使用到的jar文件. 2编写Struts2的配置文件 3在web.xml中加入Struts2 MVC框架启动配置,Struts2需要的jar包,下面给出了开发Struts 2程序最少需要的JAR。 struts2-core-2.x.x.jar :Struts 2框架的核心类库 xwork-core-2.x.x.jar :XWork类库,Struts 2在其上构建 ognl-2.6.x.jar :对象图导航语言(Object Graph Navi

21、gation Language),struts2框架通过其读写对象的属性 freemarker-2.3.x.jar :Struts 2的UI标签的模板使用FreeMarker编写 commons-logging-1.x.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。 commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件,搭建Struts2开发环境- Struts2应用的配置文件,细说常量定义,常量可以在struts.xml或struts.properties中配置,建议在str

22、uts.xml中配置,两种配置方式如下: 在struts.xml文件中配置常量在struts.properties中配置常量 struts.action.extension=do因为常量可以在下面多个配置文件中进行定义,所以我们需要了解struts2加载常量的搜索顺序: struts-default.xml struts-plugin.xml struts.xml struts.properties web.xml 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值.,常用的常量介绍,Action配置中的各项默认值, /WEB-INF/page/hello

23、.jsp1如果没有为action指定class,默认是ActionSupport。 2如果没有为action指定method,默认执行action中的execute() 方法。 3如果没有指定result的name属性,默认值为success。,Action中result的各种转发类型,/WEB-INF/page/hello.jspresult配置类似于struts1中的forward,但struts2中提供了多种结果类型, 常用的类型有: dispatcher(默认值)、 redirect 、 redirectAction 、 plainText。在result中还可以使用$属性名表达式访问

24、action中的属性,表达式里的属性名对应action中的属性。如下: /view.jsp?id=$id下面是redirectAction 结果类型的例子,如果重定向的action中同一个包下: helloworld 如果重定向的action在别的命名空间下:helloworld/testplaintext:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型。/xxx.jspUTF-8 ,指定需要Struts 2处理的请求后缀,前面我们都是默认使用.action后缀访问Action。其实默认后缀是可以通过常量”struts.action.extension“

25、进行修改的,例如:我们可以配置Struts 2只处理以.do为后缀的请求路径:如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:,搭建Struts2开发环境-Struts2在web中的启动配置,在struts1.x中, struts框架是通过Servlet启动的。 在struts2中,struts框架是通过Filter启动的。他在web.xml中的配置如下:struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterorg.apache.struts2.dispatcher.Filt

26、erDispatcher struts2/*在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。注意:struts2读取到struts.xml的内容后,以javabean形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件,为应用指定多个struts配置文件,在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高strut

27、s.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过元素指定多个配置文件:通过这种方式,我们就可以将Struts 2的Action按模块添加在多个配置文件中。,Struts2优点,Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。那么既然有了struts1,为何还要推出strut

28、s2。主要是因为struts2有以下优点:1.在软件设计上Struts2没有像struts1那样跟Servlet API和struts API有着紧密的耦合,Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。 public class OrderListAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, Ht

29、tpServletResponse response)throws Exception 2 .Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。 3. Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。 4. Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等 5. Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。 6. 提供了全局范围、包范围和Action范围

30、的国际化资源文件管理实现 。,Spring,36,Spring简介,Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。 目的:解决企业应用开发的复杂性。 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 。 范围:任何Java应用 。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。,37,Spring简介,Spring即是一个容器又是一个框架。容器Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建基于一个可配置原型(prototype),你的bean可以创

31、建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。 Spring是一个轻量级的解决方案,Spring是模块化的,允许你使用仅需要的部分。 Spring提供了很多基础的与业务逻辑无关的功能比如:事务管理、持久化框架集成等等比如:事务管理、持久化框架集成等等,使用Spring框架,开发人员可以专注于业务逻辑开发,这个意义上讲它是一个框架。,38,Spring核心模块(Spring Core) Spring的核心容器模块,它提供IOC的支持。该模块中包含BeanFactory,它采用工厂模式来实现IOC,负责对bean的生命周期的管理。 Application Context

32、(上下文模块) 该模块扩展了BeanFactory的功能,例如提供了i18n,系统生命周期以及验证的支持 Spring的AOP模块 该模块为应用系统的AOP开发提供了支持。,Spring模块,39,Spring体系结构,40,IOC(Inversion of control)即控制反转。 IOC即使用容器来控制程序之间的依赖关系,而非用程序代码来控制。控制权由原来的代码转移到到了容器,所以也称之为反转控制。 IOC又名,依赖注入,DI(Dependency Injection)。 依赖注入:组件之间的依赖关系,由容器运行时动态的注入,而非编写代码给定。,IOC,41,没有使用IOC的订单管理的

33、业务类保存订单的代码,未使用IOC示例代码,private OrderDao orderDao = null; public OrderDao getOrderDao()/未使用IOC,代码新建Dao的实例 orderDao = new OrderDao(); public void saveOrder(Order order)/获取Dao,调用Dao的方法保存订单getOrderDao().save(order); ,42,使用IOC示例代码,private OrderDao orderDao = null; public OrderDao getOrderDao()/使用IOC,Dao由容

34、器调用当前对象的 /setOrderDao方法设置,所以直接返回Daoreturn orderDao /容器自动调用该方法注入当前对象依赖的OrderDao public void setOrderDao(OrderDao dao)this.orderDao = dao; public void saveOrder(Order order)/获取Dao,调用Dao的方法保存订单getOrderDao().save(order); ,43,Spring是一个轻量级的框架,轻量级与重量级框架没有明显的界限,一般以是否需要特定的Application服务为界。 轻量级:非侵入式,框架更小,性能高。

35、反向控制:Spring提倡使用IOC来实现松耦合,使用IOC对象是被动接收依赖类而不是主动去找。 面向切面:Spring对面向切面的编程提供了强大的支持,例如可以将系统的事务,日志从业务代码中分离出来。 容器:Spring是一个容器,它负责管理系统对象的生命周期和配置,例如你可以配置一个bean是产生一个实例还是每次请求都产生一个实例,它的容器相对于EJB容器更加简洁。 框架:Spring实现了使用简单的组件来配置组装一个复杂的系统。,Spring的特点,44,JDBC和DAO模块 提供了JDBC封装的模板代码,使得使用JDBC开发更加简洁。 O/R映射模块 该模块提供了对许多流行的ORM框架

36、的支持,其中包括Hibernate,JDO和iBATIS SQL的支持 Spring Web模块 该模块中Spring提供了对其它的WEB框架的支持,包知Struts,JSF,WEBWORK等 Spring MVC框架 Spring提供的用于开发WEB应用的MVC框架,Spring模块,45,核心容器提供了IOC的具体实现,所有的其它模块都是建立在它的基础之上。 建立Spring核心应用的基本步骤 引用Spring相关的Jar文件 建立Spring的配置文件,它是一个XML文件,用于配置配置Bean的实例及依赖关系。 建立Bean类,并在XML文件中注册及注入依赖。 根据配置文件建立容器实例即

37、:BeanFactory实例。 通过BeanFactory获取容器中的Bean实例。,建立Spring核心应用,46,Spring的配置文件,Spring2.0的核心容器只需要Spring.jar文件即可。 Spring配置文件示例: 配置文件一般存放在类路径中,以applicationContext.xml命名,Spring充许有多个配置文件。,/注册bean及依赖 ,47,注册Bean的实例及依赖,Spring中Bean实例的注册及依赖注入示例:,/注册了一个com.Bar的实例bar/*注册一个com.Foo的实例foo,并为之注入了bar的属性,属性值引用已注册的bar实例*/,48,

38、建立使用BeanFactory,BeanFactory为Spring核心容器的实现接口。 示例建立BeanFactory实例:,BeanFactory bf = new XmlBeanFactory( new ClassPathResource(“applicationContext.xml“) );,从当前BeanFactory中获取Bean实例,Foo foo = (Foo)bf.getBean(“foo“);,49,使用上下文模块,Spring上下文模块,封装了Spring的核心模块,提供了更多的应用功能,Spring提供了三种类型的上下文,分别用于同的应用环境: ClassPathXm

39、lApplicationContext通过引用类路径中的配置文件来建立ApplicationContext实例。 FileSystemXmlApplicationContext通过引用文件系统中的配置文件来建立ApplicationContext实例。 XmlWebApplicationContext从Web应用的环境中获取配置文件。,建立Spring上下文实例,并获取注册的Bean:,ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml“); Foo foo = (Foo)app

40、.getBean(“foo“);,50,JavaWeb与Spring的整合,JavaWeb实例化ApplicationContext,contextConfigLocationclasspath:resource/spring/applicationContext*.xml /配置Spring配置文件 /配置监听以实例化Spring上下文org.springframework.web.context.ContextLoaderListener,51,JavaWeb与Spring的整合,Jsp/Servlet中获取Spring的Bean实体,srv.TestServices ts =(srv.T

41、estServices) WebApplicationContextUtils .getWebApplicationContext(this.getServletContext() .getBean(“sayHello“);,52,Spring中Bean生命周期,53,Spring IOC配置,Spring的核心容器负责管理Bean的生命周期,并负责注入Bean的依赖。 Set注入 利用属性的set方法注入其依赖的对象 构造注入基于构造方法数据类型的注入基于构造方法索引的注入基于构造方法参数名字的是注入 自动注入 在Spring构建Bean的实例后,自动搜索与Bean属性名或类型相匹配的其它B

42、ean实例并注入。,54,Set 注入的方法,使用注入已注册的其它的Bean实例。,55,基于构造方法注入,。,56,构造注入与Set注入比较,构造注入的优点 构造注入提供了强制依赖,如果某些属性没有注入,bean将无法被实例化 bean的更加简洁,因为bean的属性通过构造方法注入,而无需为bean的属性提供set方法 因为只有通过构造方法才能设置bean的属性可以保证bean的属性不变性 构造注入的缺点 如果bean的属性非常多,势必造成构造方法的参数会很长 如果一个bean有已有多个构造方法,那么很难再提出不同的构造方法,因为只能通过构造方法的参数来区分不同的构造方法 如果一个构造参数有

43、两个类型相同的参数,很难确定他们的用途 另外构造函数注入不利于类的继承 一个好的尺度是对于那些必需的属性可使用构造注入,而对于非必需的属性可考虑使用set注入。,57,构造注入与Set注入比较,构造注入的优点 构造注入提供了强制依赖,如果某些属性没有注入,bean将无法被实例化 bean的更加简洁,因为bean的属性通过构造方法注入,而无需为bean的属性提供set方法 因为只有通过构造方法才能设置bean的属性可以保证bean的属性不变性 构造注入的缺点 如果bean的属性非常多,势必造成构造方法的参数会很长 如果一个bean有已有多个构造方法,那么很难再提出不同的构造方法,因为只能通过构造

44、方法的参数来区分不同的构造方法 如果一个构造参数有两个类型相同的参数,很难确定他们的用途 另外构造函数注入不利于类的继承 一个好的尺度是对于那些必需的属性可使用构造注入,而对于非必需的属性可考虑使用set注入。,58,使用Required,使用Set注入时在Spring2.0之前不能强制注入,在Spring2.0中可使用Required注解强制注入属性值,若运行时未注入值,Spring将抛出异常提示。,private UserDao userDao = null; Required /强制注入 public void setUserDao(UserDao userDao) this.userD

45、ao = userDao; ,59,自动注入,如果设置Bean为自动注入,Spring构建Bean实例后,会自动设置Bean的属性值。 自动注入的方式有: byName,根据属性的名称自动从容器中寻找与之匹配的bean的定义进行装配。 byType,根据属性的类型自动从容器中寻找与之匹配的bean的定义进行装配。 constructor,用于构造函数自动装配,从容器中查找与构造参数类型一致的bean进行自动装配。 autodetect,首先使用constructor装配,再使用byType进行装配。,60,自动注入示例,自动装配也可以与显式的声明装配配合使用,public class Orde

46、rSrv private OrderDao orderDao; private CustomerDao cusDao; public OrderDao getOrderDao() return orderDao; public void setOrderDao(OrderDao orderDao) this.orderDao = orderDao; public CustomerDao getCusDao() return cusDao; public void setCusDao(CustomerDao cusDao) this.cusDao = cusDao; ,61,自动注入示例,自动装

47、配也可以与显式的声明装配配合使用,此处orderDao属性使了显示的Set注入,而cusDao将被容器自动注入到orderSrv。,62,Bean的继承,Spring中充许一个Bean继承另一个Bean的配置,注:标注为abstract=“true”的Bean是不会被实例化的。,63,使用自定义配置参数,Spring中Bean的固定属性值不仅可以通过value元素注入,也可以通过属性文件指定。 使用属性文件可以将重要的配置信息放在独立的文件中,例如数据库的帐号和密码。 Spring提供了PropertyPlaceholderConfigurer通知容器如何加载属性文件。,config.properties/指定了配置文件的类路径,64,使用自定义配置参数,示例中使用属性文件中的配置,配置对象的属性。,$db.url /表示引用config.properties中key为db.url的值,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报