ssm之spring框架知识点总结

Spring框架知识点总结

spring是什么:

Spring一个开源的,用来简化企业级应用开发的应用开发框架。Spring的核心就是IOC(控制反转)DI(依赖注入,很多博客把这一点省略了,但是本人做了一些题之后发现依赖注入这一点也是考核点)AOP(面向切面编程),提供了展示层SpringMvc和控制层Spring JDBC以及业务层事务管理等众多企业级应用技术。
Spring容器:spring框架中的一个核心模块,用来管理对象(包括对象的创建,销毁和初始化等)。它帮助完成类的初始化与装配工作,让开发者从这些底层类的实例化,依赖关系装配类的工作中脱离出来,专注于更有意义的业务逻辑开发工作。在此可以看出,spring有降低代码耦合的作用。
顺便提一下ssm框架:
ssm框架是spring MVC,spring和mabatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层。
spring MVC:负责请求的转发和视图管理。
spring :实现业务对象管理。
mybatis :作为数据对象的持久化引擎。
图中Spring提供了Core Container核心容器、DataAccess/Integration数据持久化、Web等的支持。

Spring的入门(IOC和DI)

IOC(控制反转)

IOC:Inversion of Control(控制反转:将对象的创建权交给(反转给)Spring)。IOC的基本思想就是反转资源获取的方向,应用了IOC之后,则是容器主动的将资源推送给它所管理的组件,组件只需要做的是选择一种合适的方式来接受资源,这种行为就被看做是组件被动的查找资源。

DI(依赖注入)

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它。所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。这种现象就称作控制反转,即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。虽然平时只需要按要求将bean配置到配置文件中,但是了解其实现过程对理解spring的实现原理是有好处的
DI是对IOC的另一种表达方式,也就是组件以一些预先定义好的方式(例如setter方法)接受来自容器的资源注入,相对于IOC而言,这种表述更直接。

依赖注入的3种方式

spring依赖注入有如下几种方式:
①setter方式注入(设值注入)
②构造器方式注入
Spring支持利用构造器注入参数实例化Bean方式。只要在Spring的配置文件中增加构造器参数constructor-arg,Spring就会自动的调用有参数的构造器创建bean对象实例, 整个过程无需程序编码只需要配置applicationContext.xml文件即可
③自动装配功能实现属性自动注入
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,autowire可以针对单个bean进行设置,
autowire的方便之处在于减少xml的注入配置。
在xml配置文件中,可以在元素中使用autowire属性指定自动装配规则,一共有五种类型值:

属性值 描述
no 禁止自动装配,默认值
byName 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其余属性自动装配
byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该书性自动装配
constructor 与byType的方式类似,不同在于它应用于构造器参数
autodetect 通过bean类来决定是使用constructor还是byType方式进行自动装配,如果发现默认的构造器,那么将用byType方式

开发包

1.下载开发包:http://spring.io/
2. 解压开发包:
在这里插入图片描述
docs:Spring的开发规范和API
lib:Spring的开发JAR和源码
schema:spring的配置文件的约束
在这里插入图片描述

工厂模式beanfactory和applicationcontext区别

BeanFactory接口,由于是spring的原始接口,因此:
(1) 功能较为单一
(2)每次在获得对象时才会创建对象
ApplicationContext接口:
(1)每次容器启动时就会创建容器中配置的所有对象
(2)提供了更多功能
(3)从类路径下加载配置文件: ClassPathXmlApplicationContext,从硬盘的绝对路径下加载配置文件:FileSystemXmlApplication

AOP面向切面编程

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。 比如我们最常见的就是日志记录了,举个例子,我们现在提供一个服务查询学生信息的,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但却是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。

spring对bean的生命周期的描述

如果Bean类有实现org.springframework.beans.factory.BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。 可以在Bean定义文件中使用"init-method"属性,执行到这个阶段时,就会执行initBean()方法。
如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行他的destroy()方法。
<bean ...></bean>中有一个属性,叫scope,就是设定生命范围的。
Scope的作用:
可以用scope属性来限定bean的生命范围(即是在什么范围内拿到的bean是相同的)
scope属性经常使用的值有一下几种:
(1)Singleton:
一个Spring容器中只有一个Bean的实例,全容器共享一个实例。 在Spring中,Bean的scope默认是singleton的,也就是“单例”。
(2)prototype:
(原型模式)每次拿一个对象,都是对"原型"对象的一次拷贝;每拿一次就是通过拷贝原型来创建一个新的对象;
注意:如果bean的scope是prototype,spring不会自动的调用destory-method;
request :
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会创建一个新的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

global session :
仅在使用portlet context的时候有效,给每一个 global http session 新建一个Bean实例。 该作用域仅在基于web的Spring ApplicationContext情形下有效。

发布了11 篇原创文章 · 获赞 5 · 访问量 738

猜你喜欢

转载自blog.csdn.net/JAVA_php_Jack/article/details/102774780