spring概念

一、spring特点

1.轻量级

2.控制翻转

1.1 spring通过IOC来控制低耦合

1.2 当应用了IOC一个对象依赖的其他对象会通过被动的方式传进来,而不是自己创建 或者自己查找

3.面向AOP

3.1 spring面向切面编程 并把业务逻辑和系统服务分开

4.容器

4.1 spring包含并管理应用配置对象的生命周期,这个意义上它是一种容器

5.框架整合

5.1 spring可以将简单的组件,配置组合成复杂的服务

5.2  spring也提供了基础功能,并将业务逻辑的开发留给开发者

二、Spring IOC 原理

1.概念

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。

Spring 的 IoC 容器在完成这些底层工作的基础上,还提供 了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、

资源装载等高级服务。

2.容器实现

BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用

ApplicationContext 而非底层 的 BeanFactory。

以下是类图

BeanDefinition

Spring 配置文件中每一个节点元素在 Spring 容器里都通过一个 BeanDefinition 对象表示, 它描述了 Bean 的配置信息。

BeanDefinitionRegistry

BeanDefinitionRegistry 接口提供了向容器手工注册 BeanDefinition 对象的方法。

BeanFactory

位于类结构树的顶端 ,它最主要的方法就是 getBean(String beanName),该方法从容器中 返回特定名称的 Bean

BeanFactory 的功能通过其他的接口得到不断扩展:

ListableBeanFactory

该接口定义了访问容器中 Bean 基本信息的若干方法,如查看 Bean 的个数、获取某一类型 Bean 的配置名、查看容器中是否包括某一 Bean 等方法;

HierarchicalBeanFactory 父子级联

父子级联 IoC 容器的接口,子容器可以通过接口方法访问父容器; 通过 HierarchicalBeanFactory 接口, Spring 的 IoC 容器可以建立父子层级关联的容器体系,

子 容器可以访问父容器中的 Bean,但父容器不能访问子容器的 Bean。Spring 使用父子容器实 现了很多功能,比如在 Spring MVC 中,展现层 Bean 位于一个子容器中,

而业务层和持久 层的 Bean 位于父容器中。这样,展现层 Bean 就可以引用业务层和持久层的 Bean,而业务 层和持久层的 Bean 则看不到展现层的 Bean。

ConfigurableBeanFactory

是一个重要的接口,增强了 IoC 容器的可定制性,它定义了设置类装载器、属性编辑器、容 器初始化后置处理器等方法;

AutowireCapableBeanFactory 自动装配

定义了将容器中的 Bean 按某种规则(如按名字匹配、按类型匹配等)进行自动装配的方法;

ApplicationContext 面向开发应用

ApplicationContext 由 BeanFactory 派 生 而 来 , 提 供 了 更 多 面 向 实 际 应 用 的 功 能 。 ApplicationContext 继承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口

在此基础 上,还通过多个其他的接口扩展了 BeanFactory 的功能:

 

ClassPathXmlApplicationContext:

默认从类路径加载配置文件

FileSystemXmlApplicationContext:

默认从文件系统中装载配置文件

ApplicationEventPublisher:

让容器拥有发布应用上下文事件的功能,包括容器启动事 件、关闭事件等。

MessageSource:

为应用提供 i18n 国际化消息访问的功能;

ResourcePatternResolver :

所 有 ApplicationContext 实现类都实现了类似于 PathMatchingResourcePatternResolver 的功能,

可以通过带前缀的 Ant 风格的资源文 件路径装载 Spring 的配置文件。

ConfigurableApplicationContext

ConfigurableApplicationContext 扩展于 ApplicationContext,它新增加了两个主要 的方法: refresh()和 close(),

让 ApplicationContext 具有启动、刷新和关闭应用上下 文的能力。在应用上下文关闭的情况下调用 refresh()即可启动应用上下文,

在已经启动 的状态下,调用 refresh()则清除缓存并重新装载配置信息,而调用 close()则可关闭应用 上下文。

3.Spring Bean 作用域

singleton:单例模式

Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个 Bean 引用它,始终指向同一对象。该模式在多线程下是不安全的。

Singleton 作用域是 Spring 中的缺省作用域,也可以显示的将 Bean 定义为 singleton 模式

prototype:原型模式

每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建 一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,

而 singleton 全局只有一个对 象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton 作用域。

request:

在一次 Http 请求中,容器会返回该 Bean 的同一实例。而对不同的 Http 请求则会 产生新的 Bean,而且该 bean 仅在当前 Http Request 内有效,

当前 Http 请求结束,该 bean 实例也将会被销毁。

session:

在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请 求则会创建新的实例,该 bean 实例仅在当前 Session 内有效。同 Http 请求相同,

每一次 session 请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的 session 请求 内有效,请求结束,则实例将被销毁。

4. Spring Bean 生命周期

实例化bean

ioc依赖注入

setBeanName 实现

BeanFactoryAware 实现

ApplicationContextAware 实现

postProcessBeforeInitialization 接口实现-初始化预处理

init-method

postProcessAfterInitialization

destroy-method 自配置清理

流程图如下

三、Spring APO 原理

1.概念

"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块, 并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,

却为业务模块所共 同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未 来的可操作性和可维护性。 使用"横切"技术,AOP 把软件系统分为两个部分:

核心关注点和横切关注点。业务处理的主要流 程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生 在核心关注点的多处,而各处基本相似,

比如权限认证、日志、事物。AOP 的作用在于分离系统 中的各种关注点,将核心关注点和横切关注点分离开来

AOP 主要应用场景有: 1. Authentication 权限

2. Caching 缓存

3. Context passing 内容传递

4. Error handling 错误处理

5. Lazy loading 懒加载

6. Debugging 调试

7. logging, tracing, profiling and monitoring 记录跟踪 优化 校准

8. Performance optimization 性能优化

9. Persistence 持久化

10. Resource pooling 资源池

11. Synchronization 同步

12. Transactions 事务

2.AOP 核心概念

1、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

2、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点。

3、连接点(joinpoint):被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。

4、切入点(pointcut):对连接点进行拦截的定义

5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、 异常、最终、环绕通知五类。

6、目标对象:代理的目标对象

7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程

8、引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法 或字段。

 

3.AOP 两种代理方式

1. JDK 动态代理主要涉及到 java.lang.reflect 包中的两个类:Proxy 和 InvocationHandler。 InvocationHandler是一个接口,通过实现该接口定义横切逻辑,

并通过反射机制调用目标类 的代码,动态将横切逻辑和业务逻辑编制在一起。Proxy 利用 InvocationHandler 动态创建 一个符合某一接口的实例,生成目标类的代理对象。

2. :CGLib 全称为 Code Generation Library,是一个强大的高性能,高质量的代码生成类库, 可以在运行期扩展 Java 类与实现 Java 接口,CGLib 封装了 asm,

可以再运行期动态生成新 的 class。和 JDK 动态代理相比较:JDK 创建代理有一个限制,就是只能为接口创建代理实例, 而对于没有通过接口定义业务方法的类,

则可以通过 CGLib 创建动态代理。

四、Spring MVC 原理

1.请求流程如下图

1.客户端请求到DispatcherServlet。

2.DispatcherServlet查询到一个或者多个HandlerMapping

3.DispatcherServlet 将请求提交到 Controller

4.调用业务逻辑service

5.得到结果返回返回 ModelAndView

6.DispatcherServlet 查询一个或多个 ViewResoler 视图解析器

7.将数据传给view显示

8.响应结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值