SpringBoot进阶-认识AOP、IoC及过滤器和监听器

SpringBoot进阶-认识AOP、IoC及过滤器和监听器

概述

本文主要介绍了 Spring Boot 中的 AOP 、IoC容器、Servlet、过滤器(Filter)、监听器(Listener)。

面向切面编程

什么是 AOP

AOP(Aspect Oriented Program,面向切面编程)把业务功能分为核心、非核心两部分。

  • 核心业务功能:用户登录、增加数据、删除数据。
  • 非核心功能:性能统计、日志、事务管理。

在 Spring 的面向切面编程(AOP)思想里,非核心业务功能被定义为切面。核心业务功能和切面功能先分别进行独立开发,然后把切面功能和核心业务功能“编织”在一起,这就是AOP。

AOP 将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,以便减少系统的重复代码,降低模块间的耦合度,利于未来的拓展和维护

AOP 中的概念:

  • 切入点(pointcut):在哪些类、哪些方法上切入。
  • 通知(advice):在方法前、方法后、方法前后做什么。
  • 切面(aspect):切面=切入点+通知。即在什么时机、什么地方、做什么。
  • 织入(weaving):把切面加入对象,并创建出代理对象的过程。
  • 环绕通知:AOP中最强大、灵活的通知,它集成了前置和后置通知,保留了连接点原有的方法。

认识 IoC 容器

介绍 IoC 容器

IoC(Inversion of Control)容器,是面向对象编程中的一种设计原则,意为控制反转(也称为“控制倒置”)。它将程序中创建对象的控制权交给 Spring 框架来管理,以便降低代码之间的耦合度。

控制反转的实质是:获得依赖对象的过程被反转了。 这个过程由自身管理变为了由 IoC 容器主动注入。这正是 IoC 实现方式之一:依赖注入(dependency injection,DI),由 IoC 容器在运行期间动态地将某种依赖关系注入对象之中。

在传统编程方式中,要实现某种功能一般都需要几个对象相互作用。在主对象中要保存其他类型对象的引用,以便在主对象中实例化对象,然后通过调用这些引用的方法来完成任务。

而 IoC 容器是在主对象中设置 setter 方法,通过调用 setter 方法或构造方法传入所需引用(依赖注入)。

要使用某个对象,只需要从 IoC 容器中获取需要使用的对象,不需要关心对象的创建过程,即把创建对象的控制权反转给了 Spring 框架。

IoC 的实现方法

IoC 的实现方法主要有两种–依赖注入与依赖查找。

1.依赖注入

  • IoC 容器通过类型或名称等信息将不同对象注入不同属性中。组件不做定位查询,只提供普通的 Java 方法让容器去决定依赖关系。这是最流行的 IoC 实现方法。依赖注入主要有以下几种方式:
    • 设值注入(setter injection):让 IoC 容器调用注入所依赖类型的对象。
    • 接口注入(interface injection):实现特定的接口,以供 IoC 容器注入所依赖类型的对象。
    • 构造注入(constructor injection):实现特定参数的构造函数,在创建对象时让 IoC 容器注入所依赖类型的对象。
    • 基于注解:通过 Java 的注解机制让 IoC 容器注入所依赖类型的对象,例如,使用 @Autowired

IoC 是通过第三方容器来管理并维护这些被依赖对象的,应用程序只需要接收并使用 IoC 容器注入的对象。

2.依赖查找

  • 在传统实现中,需要用户使用 API 来管理依赖的创建、查找资源和组装对象。这会对程序有侵入性。
  • 依赖查找则通过调用容器提供的回调接口和上下文环境来获取对象,在获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。依赖查找通常有两个方法–依赖拖拽(DP)和上下文依赖查找(CDL)。

认识 Servlet、过滤器与监听器

认识 Servlet

Servlet 是在 javax.servlet 包中定义的一个接口。 Spring Boot 的核心控制器 DispatchServlet 会处理所有的请求。如果自定义 Servlet ,则需要进行注册,以便 DispatchServlet 核心控制器知道它的作用,以及处理请求 url-pattern 。

使用 Servlet 处理请求,可以直接通过注解 @WebServlet(urlPattern, descript) 注册 Servlet ,然后在入口中添加 @ServletComponentScan ,以扫描该注解指定包下的所有 Servlet 。

Servlet 容器

Servlet容器主要是为 Java Web 应用提供运行时环境,所以也可以称之为 Java Web 应用容器,或者Servlet/JSP容器。Servlet容器主要负责管理Servlet、JSP的生命周期以及它们的共享数据。

目前最流行的Servlet容器包括: Tomcat、Jetty、Jboss等。

我们通过请求访问 Web 服务器映射的 URL 资源时,应用程序处理主要有 3 个过程:接收请求、处理请求、响应请求; 接收请求和响应请求是共性功能,这部分便由 Web 服务器来实现,但处理请求的逻辑是不同的,因此请求的处理通过 相应的 Servlet 来进行处理。

认识过滤器

在很多 Web 项目中,都会用到过滤器(Filter),如参数过滤、防止 SQL 注入、防止页面攻击、空参数校验、Token 验证、Session 验证、点击率统计等。

利用 Filter 可以实现对所有接口进行过滤处理。这样非常方便,同时不会出现冗余代码。

使用 Filter 的步骤:

  • 1.新建类,实现 Filter 抽象类。
  • 2.重写 init、doFilter、destory 方法。
  • 3.在 Spring Boot 入口中添加注解 ServletComponentScan ,以注册 Filter 。

通过在过滤器类上添加注解 @WebFilter定义作用范围,例@WebFilter(urlPatterns="/*")定义了 urlPatterns变量值为 * ,代表 “所有的路径”。所以,用户在访问本项目下的任何路径的页面时,此过滤器都会生效。

当有多个过滤器类时,可以通过在过滤器类上添加注解 @Order 设置过滤器的执行顺序。例 @Order(1) ,序号越小,越早执行。

认识监听器

监听器(Listener)用于监听 Web 应用程序中某些对象或信息的创建、销毁、增加、修改、删除等操作,然后做出相应的响应处理。

当对象的状态发生变化时,服务器自动调用监听器的方法,监听器常用于统计在线人数、在线用户、系统加载时的信息初始化等

Servlet 中的监听器分为以下3种类型:

  • 1.监听 ServletContext、Request、Session 作用域的创建和销毁
    • ServletContextListener:监听ServletContext。
    • HttpSessionListener:监听新的 Session 创建事件。
    • ServletRequestListener:监听 ServletRequest 的初始化和销毁。
  • 2.监听 ServletContext、Request、Session 作用域中属性的变化(增加、修改、删除)
    • ServletContextAttributeListener:监听 ServletContext 参数的变化。
    • HttpSessionAttributeListener:监听 HttpSession 参数的变化。
    • ServletRequestAttributeListener:监听ServletRequest 参数的变化。
  • 3.监听 HttpSession 中对象状态的改变(被绑定、解除绑定、钝化、活化)
    • HttpSessionBindingListener:监听 HttpSession,被绑定及解除绑定。
    • HttpSessionActivationListener:监听钝化和活动的 HttpSession 状态改变。

session 的四种状态:绑定、解除绑定、钝化、活化

当有很多用户发起请求时,服务器为每个用户创建一个 session 对象,当内存无法容纳时,会将 session 对象 从内存放到磁盘称之为 钝化,将 session 对象从磁盘返回到内存称之为 活化

将某一个对象保存到 session 中,例: session.setAttribute(“a”, xxx) 称之为将对象 a 绑定到 session 中;反之 将对象从 session 中移除,例: session.removeAttribute("a) 称之为将对象 “a” 从 session 中 解绑

实现监听器:

  • 1.创建自定义监听器类,实现相应的监听器接口,使用注解 @WebListener 标注此类是监听类。
  • 2.开启监听器Bean扫描。在入口类上,添加注解 @ServletComponentScan

总结

AOP

在 Spring 的 OP(Aspect Oriented Program,面向切面编程) 思想里,把业务功能分为核心、非核心两部分,非核心业务功能被定义为切面。核心业务功能和切面功能先分别进行独立开发,然后把切面功能和核心业务功能“编织”在一起,这就是AOP。

AOP 将那些与业务无关(如事务、日志等),却为业务模块所共同调用的逻辑封装起来,以便减少系统的重复代码,降低模块间的耦合度,利于未来的拓展和维护。

IoC

IoC(Inversion of Control,控制反转)容器,是面向对象编程中的一种设计原则,它将程序中创建对象的控制权交给 Spring 框架来管理,以便降低代码之间的耦合度

控制反转的实质是:获得依赖对象的过程被反转了。 这个过程由自身管理变为了由 IoC 容器主动注入。这正是 IoC 实现方式之一:依赖注入(dependency injection,DI),由 IoC 容器在运行期间动态地将某种依赖关系注入对象之中。

要使用某个对象,只需要从 IoC 容器中获取需要使用的对象,不需要关心对象的创建过程,即把创建对象的控制权反转给了 Spring 框架。

Servlet

Servlet 是在 javax.servlet 包中定义的一个接口,是运行在 Web 服务器或应用服务器上的程序,使用 Servlet 用来处理请求

Spring Boot 的核心控制器 DispatchServlet 会处理所有的请求。

Servlet容器 主要是为 Java Web 应用提供运行时环境,主要负责管理 Servlet、JSP的生命周期以及它们的共享数据

我们通过请求访问 Web 服务器映射的 URL 资源时,由 Web 服务器(Servlet容器) 接收请求,再由 Servlet 来处理请求,最后由 Web 服务器(Servlet容器) 响应请求。

认识过滤器

利用 过滤器 Filter 可以实现对所有接口进行过滤处理,如参数过滤、防止 SQL 注入、防止页面攻击、空参数校验、Token 验证、Session 验证、点击率统计等。

认识监听器

监听器(Listener)用于监听 Web 应用程序中某些对象或信息的创建、销毁、增加、修改、删除等操作,然后做出相应的响应处理。

当对象的状态发生变化时,服务器自动调用监听器的方法,监听器常用于统计在线人数、在线用户、系统加载时的信息初始化等

公众号

知行chen

参考

《Spring Boot 实战派》 龙中华

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值