spring基础

41 阅读6分钟

一,spring概述

1,Spring是当今流行的JavaEE程序的框架。可帮助

开发人员搭建性能好,易于测试,可重用的代码。

2,Spring框架是一个轻量级的,开源的java开发平台,与2003年6月首次发布在Apache上

3,Spring致力于java应用车灯徐的各种解决方案,贯穿于视图层,,业务层,持久层,而不是专注于某一层(比如Mybatis专注于持久层)。

4,目前最新版本是5.3.9,我们目前学习的版本是4.3.18。

二,Spring的优良特性

  1. 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API;
  2. 控制反转:IOC——Inversion of Control,指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后,对象的创建都是给了 Spring 框架。
  3. 依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。
  4. 面向切面编程:AOP-Aspect Oriented Programming。在程序运行某个方法时,在不修改原始代码的情况下,由程序动态地执行某些额外的功能,对原有的方法做增强。
  5. 容器:Spring 是一个容器,因为它包含并且管理应用对象的生命周期。
  6. 组件化:Spring 可以使用XML和Java注解将简单的组件配置组合成一个复杂的应用。
  7. 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库,如Mybais。(实际上 Spring 自身也提供了表现层的 SpringMVC 和持久层的 Spring JDBC)。

三,Spring的体系结构

Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

  • JDBC 模块:提供了一个 JBDC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。
  • ORM 模块:提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。
  • OXM 模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。
  • JMS 模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  • Transactions 事务模块:支持编程和声明式事务管理。

2. Web 模块

  • Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件,具体介绍如下。
  • Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。
  • Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。
  • WebSocket 模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。
  • Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。

3. Core Container(Spring 的核心容器)

  • Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
  • Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。
  • Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。
  • Context 上下文模块:建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
  • SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。

4. AOP、Aspects、Instrumentation 和 Messaging

  • 在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:
  • AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。
  • Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
  • Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
  • messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

5. Test 模块

Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

控制反转

1,控制反转(Inversion of Control,IoC)

也被称为依赖注入(Dependency Injecton,DI)。是面向对象编程中的一种设计模式。用来降低代码之间的一种耦合度。

其实质:控制权发生转换。

2,依赖

一般是指通过局部变量,方法的参数,返回值等建立的,对于其它对象的调用关系。

3,依赖注入

由容器(Spring)负责把组件所依赖的具体对象注入(赋值)给组件从而避免组件之间的硬编码方式耦合在一起。

用注解实现依赖注入

Spring从2.5之后开始支持注解的方式开发,有效的简化代码,加快开发速度。

一,@Component

功能:指定对应的类是Spring控制的Bean;

格式:定义在类上,可以加参数(bean的name),可以添加多个("naem1","name2"...);

Spring2.5之后还定义了3个@Component的衍生注解,用于对其进行分类管理:

@Repository: 用于标注持久层(DAO层);

@Service:用于业务层(Service层)

@Controller:用于标注控制层;

二,@Autowired和@Resource

功能:用来自动专配Bean

不同点:

1,@Autowired:由Spring提供,默认按照类型匹配

(1)如果容器中有多个相同的Bean,需要通过@Qualifier("BeanName")来指定具体要装配哪个Bean;

(2)如果依赖不是必需的,可以通过@Autowired(required=false)来设置

2,@Resource:由java提供,默认先是按照名称装配,如果没有,再按照类型装配;

三,需要在Spring的配置文件中开启注解扫描功能

www.springframework.org/schema/bean…"

xmlns:xsi="www.w3.org/2001/XMLSch…"

xmlns:context="www.springframework.org/schema/cont…"

xsi:schemaLocation="www.springframework.org/schema/bean… www.springframework.org/schema/bean… www.springframework.org/schema/cont… www.springframework.org/schema/cont…">