Spring实训讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring AOP
• Spring的 AOP 封装包提供了符合 AOP Alliance规范的面向方面的编程(aspect-oriented programming) 实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲, 从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种 行为信息合并到你的代码中,这有点象.Net的attribute的概念。
• •
依赖注入的三种方式
接口注入 设值注入 服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查 询依赖性(例如,需要的附加服务) 通过 JavaBean 的属性(例如 setter 方法)分配依赖性
构造子注入
依赖性以构造函数的形式提供,不以 JavaBean 属性的形式公开
接口注入
Spring IOC管理的Bean
• • 每个bean的定义可以是一个POJO(定义class和JavaBean初始化属性), 或者一个FactoryBean。 public class OrderBean implements IOrderBean{ … public void setMinimumAmountToProcess(double d){ this. minimumAmountToProcess = d; } public void setOrderDAO(IOrderDAO odao){ this.orderDAO = odao; } } XML配置: <bean id=“orderBean” class=“example.OrderBean” init-method=“init”> <property name=“minimumAmountToProcess”>10</property> <property name=“orderDAO”> <ref bean=“orderDAOBean”/> </property> </bean>
Spring DAO
• DAO 提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且, JDBC 封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对 所有的POJOs(plain old Java objects)都适用。
Spring ORM
不使用IOC/DI的编程方式
• • • • • • • • • • • • • • public class OrderServiceImpl implements IOrderService { public Order saveOrder(Order order) throws OrderException{ IOrderDAO orderDAO = new OrderDAO(); try{ // 1. Create a Session/Connection object // 2. Start a transaction // 3. Lookup and invoke one of the methods in a // DAO and pass the Session/Connection object. // 4. Commit transaction }catch(Exception e){ // handle e, rollback transaction }finally{ //Release resources and handle more exceptions } }
使用IOC/DI编程方式
• • • • • • • • • • public class OrderSpringService implements IOrderService { IOrderDAO orderDAO; public Order saveOrder(Order order) throws OrderException{ // perform some business logic… return orderDAO.saveNewOrder(order); } public void setOrderDAO(IOrderDAO orderDAO) { this.orderDAO = orderDAO; } }
IOC与Spring
基本概念
• 依赖:在java中,软件代码的逻辑组件和功能服务的划分,通常被定义为Java类或者对象的实例。 而每一个对象都必须使用其他的对象,或者与其他对象合作以便完成它的任务。比如,对于对象A, 可以说凡是对象A涉及的其他对象都是它的依赖。而依赖的产生和获得,就是依赖注入。 依赖注入:即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖 关系注入到组件之中。 在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间 调用方法。 • •
• ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有Spring提供的特性进行“对象/关系”映射,如前边提 到的简单声明性事务管理。
Spring Web 模块
• Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的application context。当与WebWork或Struts一起使用Spring 时,这个包使Spring可与其他框架结合。
•
•
依赖注入(Dependency Injection)
• • • • • • • • • • • • 当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean 类可以改成如下: public class PersonServiceBean { private PersonDao personDao ; //通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter 方法进行注入。 public PersonServiceBean(PersonDao personDao){ this.personDao=personDao; } public void save(Person person){ personDao.save(person); } } 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
Spring MVC 框架
• Spring中的 MVC 封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并 不是仅仅提供一种传统的实现,它提供了一种 清晰的 分离模型,在领域模型代码和web form之间。 并且,还可以借助Spring框架的其他特性。
Spring框架
Spring框架
• • Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心 容器定义了创建、配置和管理 bean 的方式。 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
Core:提供一个Spring IoC容器。 DAO:JDBC抽象、事务支持 ORM:提供对各种ORM技术支持 的API MVC:Spring自带的MVC AOP:使用Spring的动态代理实现 的AOP WEB:提供对其它MVC(struts、 webwork等等)的支持
IOC 控制反转
• • • • • • • • public class PersonServiceBean { private PersonDao personDao = new PersonDaoBean(); public void save(Person person){ personDao.save(person); } } PersonDaoBean 是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及 维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制 权的转移就是所谓反转。 IOC的实现中程序并不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接, 但在配置文件中描述哪一个组件需要哪一项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些 联系在一起。 在旧有的Java中,习惯于自己new到一个实例,由类或者对象自身来管理自己的依赖实例。而IoC就 是为了避免这一问题。这样子,我们就可以通过简单的配置,来改变获得的实例,而不用去修改大 量的代码。
简化应用对象间的依赖关系
• • Java应用(从applets的小范围到全套N层服务端企业应用)是一种典型的依赖型应用,它就 是由一些互相适当地协作的对象构成的。因此,我们说这些对象间存在依赖关系。 Spring的IoC控件主要专注于如何利用classes、对象和服务去组成一个企业级应用,通过规 范的方式,将各种不同的控件整合成一个完整的应用。Spring中使用了很多被实践证明的最 佳实践和正规的设计模式,并且进行了编码实现。
• • • ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有了上面的 代码,我们根据预先在配置文件中设定的实现类的类名(如Config.BImplementation),动态加 载实现类,并通过InterfaceB强制转型后为ClassA所用。这就是接口注入的一个最原始的雏形。 在运行期,InterfaceB实例将由容器提供。 public class ClassA { private InterfaceB clzB; public Object doSomething(InterfaceB b) { • clzB = b; • return clzB.doIt(); } „„
为何要使用Spring
• • • 降低组件之间的耦合度,实现软件各层之间的解耦。
Controller
Leabharlann Baidu
Service
DAO
可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时, 开发人员就不再需要手工控制事务,也不需处理复杂的事务传播。
• • • •
容器提供单例模式支持,开发人员不再需要自己编写实现代码。 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。 Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用 的开发。
核心容器
• Core 封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提 供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出 依赖关系和配置。
Spring 上下文
• 构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。 Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定), 事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。
Spring实训讲义
目录
• • • • • • • • Spring简介 IOC与Spring Spring框架 Spring开发 AOP开发 事务管理 Spring与Struts2 Spring与Hibernate
Spring简介
Spring是什么
• • Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是 其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架,它的主要 目得是简化企业开发。