Spring简介

来源:互联网 发布:男生冬季服装搭配知乎 编辑:程序博客网 时间:2024/05/20 01:13

什么是Spring?

     Spring是一个开源框架,是一个轻量级的Ioc和AOP容器框架。是为了解决企业应用程序开发复杂性而创建的。

Spring 框架

     Spring框架是一个分层架构,由 7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean的方式,如图 1所示。

图 1. Spring 框架的 7 个模块


     组成 Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

     SpringCore核心容器提供 Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 IOC模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

     Spring ContextSpring上下文是一个配置文件,向 Spring框架提供上下文信息。Spring上下文包括企业服务,例如 JNDIEJB、电子邮件、国际化、校验和调度功能。

     Spring AOP通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOPSpring AOP模块为基于 Spring的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB组件,就可以将声明性事务管理集成到应用程序中。

     Spring DAOJDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO的面向 JDBC的异常遵从通用的 DAO异常层次结构。

     Spring ORMSpring框架插入了若干个 ORM框架,从而提供了 ORM的对象关系工具,其中包括 JDOHibernate iBatis SQL Map。所有这些都遵从 Spring的通用事务和 DAO异常层次结构。

     Spring WebWeb上下文模块建立在应用程序上下文模块之上,为基于 Web的应用程序提供了上下文。所以,Spring框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

     Spring MVCMVC框架是一个全功能的构建 Web应用程序的 MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括 JSPVelocityTilesiText POI

IOC

IOC 控制反转:由对象自身创建自己的关联或者依赖对象,改变为由外部容器创建并将关联或依赖对象注入。

优点:可以降低程序中组件之间的耦合度。

DI 依赖注入:IOC就是通过依赖注入实现的。DI的注入方式有两种:setter注入和构造器注入。

依赖注入的方式:constructor-arg:通过构造函数注入。   property:通过setxx方法注入。

setter:

注入bean的引用<beanid=”theBean” class=”beanName” >    <property name=”propertyName”>        <ref bean=”otherBean”/>    </property></bean>直接注入值<bean id=”theBean” class=”beanName” >    <propertyname=”propertyName”>        <value>你好</value>    </property></bean>注入List集合<bean id=”theBean” class=”beanName”>    <propertyname=”propertyName”>        <list>            <value>30</value>            <refbean=“otherBean”/>        </list>    </property></bean>注入Set集合<bean id=”theBean” class=”beanName”>    <propertyname=”propertyName”>        <set>            <value>30</value>            <refbean=”otherBean”/>        </set>    </property></bean>注入Map集合<bean id=”theBean” class=”beanName”>    <propertyname=”propertyName”>        <map>            <entrykey=”key1”>                <value>30</value>            </entry>            <entrykey=”key2”>                <refbean=”otherBean”/>            </entry>        </map>    </property></bean>

构造函数:

通过<constrctor-arg>注入构造参数<bean id="theAnimal"class="ibmsoft2.OwlAnimal" >        <constructor-arg>            <value>机敏的猫头鹰</value>        </constructor-arg></bean>通过制定参数顺序解决多个构造参数确定问题<bean id="theBean"class="beanClassName" >        <constructor-argindex=”0”>            <value>arg1</value>        </constructor-arg>        <constructor-argindex=”1”>            <refbean=”otherBean”/>        </constructor-arg></bean>

Bean:在Spring容器管理之下的所有功能组件都称之为Bean

BeanFactory:即Spring控制反转容器,负责创建并维护Bean实例,根据配置文件管理Bean以及相互之间的依赖关系。

ApplicationContext:是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现。

BeanWarpper:与BeanFactory协作,负责利用反射机制以及Java Bean规范负责单个Bean的属性设定

Spring容器类型:

     1、Bean工厂(BeanFactory)是最简单的容器,提供了基础的依赖注入支持.

     2、应用上下文(ApplicationContext继承了BeanFactory接口)扩展了Bean工厂,提供了系统构架服务,功能更强大。

BeanFactory:

     BeanFactory负责创建并维护Bean的实例。BeanFactory根据配置文件创建Bean实例。

ApplicationContext:

     BeanFactory提供了针对Bean的管理功能,而ApplicationContext提供了一个更为框架化的实现。ApplicationContext覆盖了BeanFactory的所有功能,并提供了更多的特性。

ApplicationContext接口的三种实现方式:

     1)ClassPathXmlApplicationContext-从类路径中的XML文件载入上下文定义信息,把上下文定义文件当成类路径资源

     2)FileSystemXmlApplicationContext-从文件系统的XML文件载入上下文定义信息

     3)XmlWebApplicationContext-从Web系统中的XML文件载入上下文定义信息

对象创建模式:

单例模式:scope=singleton(每次都返回相同的对象)

原型模式:scope=prototype(每次都重新创建一个新对象)

AOP

1、什么是AOP ?

     面向方面/切面的编程:将程序中的交叉业务逻辑(公用代码)提取出来,称为切面,将这些切面动态的织入到目标对象,生成一个新的代理对象的过程;

把程序划分为两部分:

     1) 通用的交叉业务,公用的代码(日志,事务,安全);

     2) 具体的业务逻辑处理代码,将切面动态的织入到业务代码中;

     面向方面/切面编程:将业务分解成切面与具体的业务逻辑模块,将切面透明的接入到业务逻辑模块中,形成一个完整的程序。比如:字符编码;日志;事务等等

2、AOP的原理

     Spring的AOP, 使用的是java的动态代理机制;

1) 代理的两种方式:

     静态代理:针对每个具体类分别编写代理类,针对一个接口编写一个代理类。
     动态代理:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。

3、 AOP中的基本概念

1.通知(Advice):

     通知定义了切面是什么以及何时使用。描述了切面要完成的工作和何时需要执行这个工作。

2.连接点(Joinpoint):

     程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法被调用时、异常被抛出时等等。

3.切入点(Pointcut)

     通知定义了切面要发生的“故事”和时间,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,spring中允许我们方便的用正则表达式来指定
4.
切面(Aspect)

     通知和切入点共同组成了切面:时间、地点和要发生的“故事”
5.
引入(Introduction)

     引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能)
6.
目标(Target)

     即被通知的对象,如果没有AOP,那么它的逻辑将要交叉别的事务逻辑,有了AOP之后它可以只关注自己要做的事(AOP让他做爱做的事)
7.
代理(proxy)

     应用通知的对象,详细内容参见设计模式里面的代理模式
8.
织入(Weaving)

     把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:

     (1)编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器

     (2)类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代

     (3)运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了JDK的动态代理技术

DAO

     Spring没有直接提供DAO,而是提供DAO的开发理念,该理念秉承其一贯面向接口的编程思想,DAO层由接口和实现类构成,业务对象仅和DAO接口直接交互,而不与DAO实现发生直接关系。

     为简化开发spring提供了DAO支持类,通过该类提供的模板对象有很多操作数据的便捷方法。在开发DAO的时候,通过继承DAO支持类,即可使用其中模板对象操作数据,大大简化DAO的开发。

 

整合hibernate

两个工具类:HibernateTemplate和HibernateDaoSupport

HibernamteTemplate

     HibernateTemplate是Spring提供的一个就Hibernate访问持久层技术而言、支持Dao组件的一个工具。HibernateTemplate提供持久层访问模板,应用HibernateTemplate无须实现特定的接口,它只需要提供一个sessionFactory的引用就可以执行持久化操作。
该模板无需打开session及关闭Session。它只要获得SessionFactory的引用,就可以打开Session,并在持久化访问结束后关闭Session,程序开发只需要完成持久层逻辑,通用的CRUD操作由HibernateTemplate完成.

HibernateDaoSupport

     HibernateDaoSupport同样也是Spring提供的、为Hibernate访问数据库的DAO组件:该类主要提供如下两个方法,方便DAO的实现:

1>public finalHiberanteTemplate getHibernateTemplate()

2>public final voidsetSessionFactory(SessionFactory sessionFactory)

其中setSessionFactory方法用来接收Spring的ApplicationContext的依赖注入,可接收配置在Spring的SessionFactory实例,getHibernateTemplate方法则用来生成HibernateTeplate模板对象来完成数据库访问。
同样常用HibernateDaoSupport中的getSession方法来获取Session对象对数据库进行操作,相对HibernateTemplate对象而言,HibernateDaoSupport应用更加灵活.

整合Mybait

两个工具类:SqlSessionTemplate和SqlSessionDaoSupport

其它

两个工具类:JdbcTemplate和JdbcDaoSupport(封装jdbc)

事务管理

声明式事务:

概念:Spring提供了声明式事务管理,即不在程序中书写有关事务处理代码。

优点:使用Spring声明式事务,事务的管理将由Spring框架自动进行处理,也就意味着开发者彻底从不断重复的、琐碎的事务管理和资源回收代码解放出来,可以集中精力考虑业务逻辑的处理,即实现所谓“优雅的编程”。

事务管理器:

概念:

    1. Spring对事务的管理的支持具体体现为事务管理器

    2. Spring并不提供直接的事务管理。

    3. Spring提供事务管理器接口,并针对目前主流的事务管理平台提供

事务管理器的实现。

   

作用:       

     Spring通过事务管理器,将事务管理的责任委托给特定平台(如:Hibernate)的事务实现,即事务管理器进行了事务代理。

配置:

     <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

          <propertyname="sessionFactory" ref="sessionFactory" />

     </bean>

事务通知:

1.事务通知即具体管理事务的对象。

2.事务通知对象由Spring框架来创建。

3.事务通知按照配置好的规则,使用事务管理器进行事务管理。

4.配置事务通知的主要任务是配置事务处理规则,即事务属性。

配置:

<tx:advice id="txAdvice"transaction-manager="txManager">

<tx:attributes>

    <tx:methodname="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />

</tx:attributes>

</tx:advice>

事务切面:

1.事务切面是承载事务通知的对象,它负责将事务通知应用于适当的 功能模块中。

2.配置事务切面,实际上就是配置事务应用于系统中的哪些“地方”。

配置:

 <aop:config>

       <aop:advisoradvice-ref="txAdvice"

             pointcut="execution(*service.*.*(..))"/>

</aop:config>

原创粉丝点击