一.Spring概念

简介:
Spring是一种多层的J2EE应用程序框架,其核心就是管理资源组件以及依赖关系,Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型。

优点:
(1)方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
(2)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
(3)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
(4)方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
(5)AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
(6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。

二.Spring体系结构

Spring入门知识点

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

Data Access/Integration包含了JDBC, ORM, OXM, JMS, 和Transaction模块,spring-jdbc模块提供了一个JDBC抽象层,消除了对特定于数据库供应商的错误代码进行冗长的JDBC编码和解析的需要;spring-tx模块支持对实现特殊接口的类和所有pojo的编程和声明性事务管理;spring-orm模块为目前流行的对象关系映射api(包括JPA和Hibernate)提供集成层。使用spring-orm模块,您可以将所有这些ORM映射框架与Spring提供的所有其他特性结合使用,比如前面提到的简单声明性事务管理特性;spring-oxm模块提供了一个抽象层,支持对象/XML映射实现,如JAXB、Castor、XMLBeans、JiBX和XStream;spring-jms模块(Java消息传递服务)包含用于生成和消费消息的特性。

2、Web 模块

Web层由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块组成,spring-web模块提供了基本的面向web的集成特性,比如多部分文件上传功能,以及使用Servlet侦听器和面向web的应用程序上下文初始化IoC容器;Spring -webmvc模块(也称为Web- servlet模块)包含Spring的模型-视图-控制器(MVC)和Web应用程序的Rest Web服务实现;spring-webmvc- Portlet模块(也称为Web-Portlet模块)提供了要在Portlet环境中使用的MVC实现,并反映了基于servlet的spring-webmvc模块的功能。

3、 Core Container(核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成,具体介绍如下。

(1)Beans 模块:提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
(2)Core 核心模块:提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。
(3)Context 上下文模块:建立在核心和Beans模块的基础之上,它是访问定义和配置任何对象的媒 介。ApplicationContext 接口是上下文模块的焦点。
(4)Expression Language 模块:是运行时查询和操作对象图的强大的表达式语言。

4.、其他模块

Spring的核心框架是其他模块建立的基础,由Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(Spring表达式语言)等模块组成。

(1)Spring-core:提供了框架的基本组成部分,包括控制反转和注册依赖功能。
(2)Spring-beans:提供BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
(3)Spring-context:提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。
(4)Spring-context-support:支持整合第三方库到Spring的应用程序,特别是用于高速缓存和任务调度的支持。
(5)Spring-expression:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的1oC容器中以名称检索对象。它还支持列表投影、选择以及常见的列表聚合。

三.Spring核心

核心就是管理资源组件及其依赖关系。包括IoC(Inversion of Control 控制反转)/ DI (Dependency Injection依赖注入),Aop(Aspect Oriented Programming面向切面编程。

1、Spring之IOC

依赖注入或控制反转的定文中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器米负责,它通过开发者的配置来判断实例类型,创建后再注入调用者。由于Spring容器负责被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入。而被调用者的实例创建工作不两由调用者来创建而是由Spring来创建,控制权由应用代码转移到了外部容器,控制权发生了反转,因此称为控制反转。

2、AOP

AOP(Aspect Oriented Programming面向切面编程):我们知道OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分,如果在应用开发过程中,如果产生横切性问题,比如日志记录,权限验证,监控性能等,这个时候AOP就上场了,AOP是通过预编译方式或者运行期动态代理实现的一种方式,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

四.Spring环境搭建

1.创建配置文件,如图操作

Spring入门知识点

2.命名规范

推荐的命名为appliacationContext.xml,首字母不要大写。

3.输入名字后

再点击右上角黄色线Configure application context之后
点ok
创建完毕

4.在创建好的容器里面创建对象(创建一个实体类)

Spring入门知识点

五.DI依赖注入

Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。例如我们通常在Service层注入它所依赖的Dao层的实例;在Contorllerc层注入Service层的实例。
DI 给对象属性赋值的过程叫做依赖注入!

六.SpringDI基本依赖注入方式

1、调用set方式注入

Spring入门知识点

2、通过带参的构造方法注入

Spring入门知识点

3、P命名空间注入

Spring入门知识点

4、Spel表达式注入

Spring入门知识点

七.Bean标签属性的作用

1.name属性:

2.Scope作用域:

scope:执行bean对象创建模式和生命周期,表示创建的容器的作用域是单例模式还是多例模式(默认为单例模式)。

单例模式,若更改值,改的便是同一实体
scope="singleton"

Spring入门知识点
表示创建的对象是多例(每次使用对象的时候会额外创建一个新的)
scope="prototype"

Spring入门知识点
在这里如果改动person1则不会影响person2
Spring入门知识点
Scope="request"表示再一次请求范围内,Spring容器中的对象保持一个,公用同一个。
Scope="session"表示再一次会话范围内,Spring容器中的对象保持一个,公用同一个。
注意:后两个只能用在web项目里

3.lazi-init属性表示加载的时机(只有在scope=”singleton”才会生效)

lazy-init="true"懒加载(使用对象的时候创建);
lazy-init=false使用框架时创建

4.对象创建完成后调用的方法,和对象销毁后调用的方法

Init-method=”对象创建完成后调用的方法”;
Destroy-method=”对象销毁后调用的方法”;

八.创建Spring对象的方式

1、无参数的构造方法

Spring入门知识点

2、有参数的构造方法

Spring入门知识点

3、静态工厂创建对象

Spring入门知识点

4、非静态工厂创建对象

Spring入门知识点

九.复杂类型注入方法

例:人要养一条狗,建一个狗的实体类,然后在Man实体类中封装一个狗的对象,get/set方法toString都要有,接下来开始四种不同依赖注入对象

(1).注入对象

Spring入门知识点
Spring入门知识点
Spring入门知识点
Spring入门知识点

(2)注入数组

实体类:
Spring入门知识点
applicationContext-stu.xml中:
Spring入门知识点

(3)注入集合

Spring入门知识点

(4)注入map

Spring入门知识点

十.Spring Bean的生命周期

Bean 生命周期的整个执行过程描述如下。

1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。

2)利用依赖注入完成 Bean 中所有属性值的配置注入。

3)如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。

4)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。

5)如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。

6)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的预初始化方法 postProcessBeforeInitialzation() 对 Bean 进行加工操作,此处非常重要,Spring 的 AOP 就是利用它实现的。

7)如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。

8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。

9)如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的初始化方法 postProcessAfterInitialization()。此时,Bean 已经可以被应用系统使用了。

10)如果在 中指定了该 Bean 的作用范围为 scope=“singleton”,则将该 Bean 放入 Spring IoC 的缓存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 中指定了该 Bean 的作用范围为 scope=“prototype”,则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该 Bean。

11)如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。

Spring 为 Bean 提供了细致全面的生命周期过程,通过实现特定的接口或 的属性设置,都可以对 Bean 的生命周期过程产生影响。虽然可以随意配置 的属性,但是建议不要过多地使用 Bean 实现接口,因为这样会导致代码和 Spring 的聚合过于紧密。

相关文章: