spring⼯作机制及为什么要⽤?
spring⼯作机制及为什么要⽤?
1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应⽤系统的其他模块负责负责对请求进⾏真正的处理⼯作。
2.DispatcherServlet查询⼀个或多个HandlerMapping,到处理请求的Controller.
3.DispatcherServlet请请求提交到⽬标Controller
4.Controller进⾏业务逻辑处理后,会返回⼀个ModelAndView
5.Dispathcher查询⼀个或多个ViewResolver视图解析器,到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
为什么⽤:
1. {AOP 让开发⼈员可以创建⾮⾏为性的关注点,称为横切关注点,并将它们插⼊到应⽤程序代码中。使⽤ AOP 后,公共服务 (⽐如⽇志、持久性、事务等)就可以分解成⽅⾯并应⽤到域对象上,同时不会增
加域对象的对象模型的复杂性。
2. IOC 允许创建⼀个可以构造对象的应⽤环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的JNDI。没有使⽤⼀堆抽象⼯⼚、服务定位器、单元素(singleton)和直接构造(straight construction),每⼀个对象都是⽤其协作对象构造的。因此是由容器管理协作对象(collaborator)。
3. Spring即使⼀个AOP框架,也是⼀IOC容器。 Spring 最好的地⽅是它有助于您替换对象。有了 Spring,只要⽤ JavaBean 属性和配置⽂件加⼊依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接⼝的协作对象。}
4. Spring 框架是⼀个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核⼼容器之上,核⼼容器定义了创建、配置和管理bean 的⽅式。组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他⼀个或多个模块联合实现。每个模块的功能如下:
☆ 核⼼容器:核⼼容器提供 Spring 框架的基本功能。核⼼容器的主要组件是 BeanFactory,它是⼯⼚模式的实现。BeanFactory 使⽤控制反转 (IOC)模式将应⽤程序的配置和依赖性规范与实际的应⽤程序代码分开。
☆ Spring 上下⽂:Spring 上下⽂是⼀个配置⽂件,向 Spring 框架提供上下⽂信息。Spring 上下⽂包括企业服务,例如 JNDI、EJB、电⼦邮件、国际化、校验和调度功能。
☆ Spring AOP:通过配置管理特性,Spring AOP 模块直接将⾯向⽅⾯的编程功能集成到了 Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象⽀持 AOP。Spring AOP 模块为基于 Spring 的应⽤程序中的对象提供了事务管理服务。通过使⽤ Spring AOP,不⽤依赖 EJB 组件,就可以将声明性事务管理集成到应⽤程序中。
☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可⽤该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极⼤地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的⾯向 JDBC 的异常遵从通⽤的 DAO 异常层次结构。
☆ Spring ORM:Spring 框架插⼊了若⼲个 ORM 框架,从⽽提供了 ORM 的对象关系⼯具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通⽤事务和 DAO 异常层次结构。
☆ Spring Web 模块:Web 上下⽂模块建⽴在应⽤程序上下⽂模块之上,为基于 Web 的应⽤程序提供了上下⽂。所以,Spring 框架⽀持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的⼯作。
☆ Spring MVC 框架:MVC 框架是⼀个全功能的构建 Web 应⽤程序的 MVC 实现。通过策略接⼝,MVC 框架变成为⾼度可配置
的,MVC 容纳了⼤量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
⼀. Spring 框架的功能可以⽤在任何 J2EE 服务器中,⼤多数功能也适⽤于不受管理的环境。Spring 的核⼼要点是:⽀持不绑定到特定
J2EE 服务的可重⽤业务和数据访问对象。毫⽆疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独⽴应⽤程序、测试环境之间重⽤。
IOC 和 AOP
控制反转模式(也称作依赖性介⼊)的基本概念是:不创建对象,但是描述创建它们的⽅式。在代码中不直接与对象和服务连接,但在配置⽂件中描述哪⼀个组件需要哪⼀项服务。容器(在 Spring 框架中是 IOC 容器) 负责将这些联系在⼀起。
在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在⼀起,决定什么时间调⽤⽅法。下表列出了 IOC 的⼀个实现模式。
Spring 框架的 IOC 容器采⽤类型 2 和类型3 实现。
⾯向⽅⾯的编程
⾯向⽅⾯的编程,即 AOP,是⼀种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的⾏为(例如⽇志和事务管理)进⾏模块化。AOP 的核⼼构造是⽅⾯,它将那些影响多个类的⾏为封装到可重⽤的模块中。
AOP 和 IOC 是补充性的技术,它们都运⽤模块化⽅式解决企业应⽤程序开发中的复杂问题。在典型的⾯向对象开发⽅式中,可能要将⽇志记录语句放在所有⽅法和 Java 类中才能实现⽇志功能。在 AOP ⽅式中,可以反过来将⽇志服务模块化,并以声明的⽅式将它们应⽤到需要⽇志的组件上。当然,优势就是 Java 类不需要知道⽇志服务的存在,也不需要考虑相关的代码。所以,⽤ Spring AOP 编写的应⽤程序代码是松散耦合的。
AOP 的功能完全集成到了 Spring 事务管理、⽇志和其他各种特性的上下⽂中。
IOC 容器
Spring 设计的核⼼是 org.springframework.beans 包,它的设计⽬标是与 JavaBean 组件⼀起使⽤。这个包通常不是由⽤户直接使⽤,⽽是由服务器将其⽤作其他多数功能的底层中介。下⼀个最⾼级抽象是 BeanFactory 接⼝,它是⼯⼚设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。
BeanFactory ⽀持两个对象模型。
□ 单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进⾏检索。Singleton 是默认的也是最常⽤的对象模型。对于⽆状态服务对象很理想。
□ 原型 模型确保每次检索都会创建单独的对象。在每个⽤户都需要⾃⼰的对象时,原型模型最适合。
bean ⼯⼚的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责任从应⽤程序代码转移到框架。正如我将在下⼀个⽰例中演⽰的那样,Spring 框架使⽤ JavaBean 属性和配置数据来指出必须设置的依赖关系。
BeanFactory 接⼝
因为 org.springframework.beans.factory.BeanFactory 是⼀个简单接⼝,所以可以针对各种底层存储⽅法实现。最常⽤的BeanFactory 定义是 XmlBeanFactory,它根据 XML ⽂件中的定义装⼊ bean,如清单 1 所⽰。
清单 1. XmlBeanFactory
BeanFactory factory = new XMLBeanFactory(new FileInputSteam("l"));
在 XML ⽂件中定义的 Bean 是被消极加载的,这意味在需要 bean 之前,bean 本⾝不会被初始化。要从 BeanFactory 检索 bean,只需调⽤ getBean() ⽅法,传⼊将要检索的 bean 的名称即可,如清单 2 所⽰。
清单 2. getBean()
MyBean mybean = (MyBean) Bean("mybean");
每个 bean 的定义都可以是 POJO (⽤类名和 JavaBean 初始化属性定义) 或 FactoryBean。FactoryBean 接⼝为使⽤ Spring 框架构建的应⽤程序添加了⼀个间接的级别。
IOC ⽰例
理解控制反转最简单的⽅式就是看它的实际应⽤。在对由三部分组成的 Spring 系列 的第 1 部分进⾏总结时,我使⽤了⼀个⽰例,演⽰了如何通过 Spring IOC 容器注⼊应⽤程序的依赖关系(⽽不是将它们构建进来)。
我⽤开启在线信⽤帐户的⽤例作为起点。对于该实现,开启信⽤帐户要求⽤户与以下服务进⾏交互:
☆ 信⽤级别评定服务,查询⽤户的信⽤历史信息。
☆ 远程信息链接服务,插⼊客户信息,将客户信息与信⽤卡和银⾏信息连接起来,以进⾏⾃动借记(如果需要的话)。
☆ 电⼦邮件服务,向⽤户发送有关信⽤卡状态的电⼦邮件。
三个接⼝
对于这个⽰例,我假设服务已经存在,理想的情况是⽤松散耦合的⽅式把它们集成在⼀起。以下清单显⽰了三个服务的应⽤程序接⼝。
清单 3. CreditRatingInterface
public interface CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer);
}
清单 3 所⽰的信⽤级别评定接⼝提供了信⽤历史信息。它需要⼀个包含客户信息的 Customer 对象。该接⼝的实现是由 CreditRating 类提供的。
清单 4. CreditLinkingInterface
public interface CreditLinkingInterface {
public String getUrl();
public void setUrl(String url);
spring aop应用场景public void linkCreditBankAccount() throws Exception ;
}
信⽤链接接⼝将信⽤历史信息与银⾏信息(如果需要的话)连接在⼀起,并插⼊⽤户的信⽤卡信息。信⽤链接接⼝是⼀个远程服务,它的查询是通过 getUrl() ⽅法进⾏的。URL 由 Spring 框架的 bean 配置机制设置,我稍后会讨论它。该接⼝的实现是由 CreditLinking 类提供的。
清单 5. EmailInterface
public interface EmailInterface {
public void sendEmail(ICustomer iCustomer);
public String getFromEmail();
public void setFromEmail(String fromEmail) ;
public String getPassword();
public void setPassword(String password) ;
public String getSmtpHost() ;
public void setSmtpHost(String smtpHost);
public String getUserId() ;
public void setUserId(String userId);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。