Spring原理讲解.doc_第1页
Spring原理讲解.doc_第2页
Spring原理讲解.doc_第3页
Spring原理讲解.doc_第4页
Spring原理讲解.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

第22讲 Spring原理本讲目标: 掌握Spring依赖注入的原理一、 spring简介 Spring是一个开源框架,Rod Johnson创建。 基于控制反转(Inversion of Control ,IoC)和面向切面(Aspect Oriented Programming , AOP)的容器框架。Spring 致力于J2EE 应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说 Spring 是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring 并不想取代那些已有的框架,而与它们无缝地整合。 目标: 使现有技术更加易用,简化企业开发。 内容: 依赖注入容器,AOP实现(声明式事务), DAO/ORM支持,Web集成 使用Spring好处: 降低组件之间的耦合度, 使各层间松耦。 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。 非侵入性,对Spring API的依赖减少到最低。 AOP技术,很容易实现如权限拦截、运行期监控等功能。 提供众多辅作类,加快应用的开发,如: JdbcTemplate、 HibernateTemplate。 对于主流的框架提供集成支持,如:JDBC、Hibernate、Struts等,更便于开发。Spring框架总体架构图二、 依赖注入1. 依赖关系(Dependency)对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。 依赖一般情况下是以下几种情况之一:a、ClassA中某个方法的参数类型是ClassB;这种情况成为耦合;b、ClassA中某个方法的参数类型是ClassB的一个属性;这种情况成为紧耦合;c、ClassA中某个方法的实现实例化ClassB;d、ClassA中某个方法的返回值的类型是ClassB;如果出现了上述四种情况之一,两个类很有可能就是“依赖”关系。依赖关系(Dependency):是类与类之间的连接,依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。2. IoC 控制反转(Inversion of Control) 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。public class UserBizImpl private UserDao userDao = new UserDaoImpl(); public void save(User user) userDao.save(user); userDao是在应用内部创建及维护的。3. 依赖注入(Dependency Injection)当我们把依赖对象交给外部容器负责创建,那么UserBizImpl 类可以改成如下:public class UserBizImpl private UserDao userDao ;/通过构造器参数,让容器把创建好的依赖对象注入进UserBizImpl, public UserBizImpl(UserDao userDao) this.userDao=userDao; /也可以使用setter方法进行注入public void setUserDao(UserDao userDao)this.userDao=userDao; public void save(User user) userDao.save(user); 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。(这里通过构造器注入UserDao )4. spring实现依赖注入 运行类库方法一:到/download下载spring,然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下distspring.jarlibjakarta-commonscommons-logging.jar方法二:Hibernate添加spring支持 项目右击myeclipseadd spring capabilities 添加spring的配置文件该配置模版可以从spring的参考手册(docsreferencehtml_singleindex.html)或spring的例子中得到。配置文件的取名可以任意,文件可存放在任何目录下,但考虑到通用性,一般放在类路径下。5. 实例化spring容器实例化Spring容器常用的两种方式:方法一:(推荐)在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);方法二:在文件系统路径下寻找配置文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String“d:beans.xml“);Spring的配置文件可以指定多个,可以通过String数组传入。6. 从spring容器中得到bean当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:ApplicationContext ctx = new ClassPathXmlApplicationContext(“beans.xml”);OrderService service = (OrderService)ctx.getBean(personService);getBean()参数可以指定id属性,也可以指定name属性。id通常为有效的标识符。id=userBizImplname可以为非标识符。 name= user.Biz#Impl “无论按照id属性还是name属性找到即可7. 实例化bean 使用类构造器实例化 使用静态工厂方法实例化 public class OrderFactory public static OrderServiceBean createOrder()return new OrderServiceBean(); 使用实例工厂方法实例化: public class OrderFactory public OrderServiceBean createOrder()return new OrderServiceBean();8. Bean的作用域 singleton :在每个Spring IoC容器中一个bean定义只有一个对象实例。(缺省设置为singleton) prototype:每次从容器获取bean都是新的对象。根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。 request 表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效 session 表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效 globalSession 不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session 的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。 后面3种均基于web的Spring ApplicationContext情形下有效,了解9. 注入依赖对象 基本类型对象注入: /属性setter方法注入 注入其他bean:表示null值方式一 方式二(使用内部bean,但该bean不能被其他bean引用) 10. 集合类型的装配public class UserBizImpl private Set sets = new HashSet();private List lists = new ArrayList();priva

温馨提示

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

评论

0/150

提交评论