Spring
Spring
-
Spring概述
是一个开源框架,是为了解决企业应用程序开发复杂性而创建的
Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构
Spring致力于提供一种方法管理你的业务对象
Spring是全面的和模块化的
它的设计从底部帮助你编写易于测试的代码 -
Spring特征
轻量
从大小与开销两方面而言Spring都是轻量的
容器
Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器
控制反转
不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它
面向切面
允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发 -
优点
低侵入式设计,代码污染极低
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部 -
Spring7个模块
Spring Core核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring Context 上下文: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)、独立应用程序、测试环境之间重用。 -
Bean和Spring IOC容器
由Spring IOC容器管理的那些组成你应用程序的对象我们就叫它Bean, Bean就是由Spring容器初始化、装配及管理的对象。
Bean对象的两种模型 :
单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理想。
原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合。 -
ApplicationContext接口
BeanFactory接口
BeanFactory接口提供了IoC容器最基本功能
ApplicationContext接口
扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现常见的ApplicationContext实现类
ClassPathXmlApplicationContext ApplicationContext实现,从classpath获取配置文件; BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath.xml"); FileSystemXmlApplicationContext ApplicationContext实现,从文件系统获取配置文件。 BeanFactory beanFactory = new FileSystemXmlApplicationContext("fileSystemConfig.xml");
ApplicationContext常用方法
Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换; T getBean(String name, Class<T> requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常; T getBean(Class<T> requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有多于一个Bean存在容器将抛出异常; Map<String, T> getBeansOfType(Class<T> type) 根据指定的类型返回一个键值为名字和值为Bean对象的 Map,如果没有Bean对象存在则返回空的Map。
在applicationContext中配置Bea
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <bean id="hello" name="hello1" class="com.trkj.beans.HelloWorld"></bean> </beans>
-
Spring零配置
零配置
零配置是指不需要在xml文件中配置Bean,而是借助注解实现
配置Bean的注解
@Component :标注一个普通的Spring Bean类。
@Controller : 标注一个控制器组件类。
@Service: 标注一个业务逻辑组件类。
@Repository : 标注一个DAO组件类。applicationContext.xml自动扫描Bean:
<!--自动扫描Bean--> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.trkj.*" /> </beans>