spring框架

spring拦截器和过滤器

前提是你 提交于 2020-03-05 16:09:29
1.什么是拦截器   拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略。它通过动态拦截Action调用的对象,允许开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。 2.拦截器作用   拦截用户的请求并进行相应的处理,比如:判断用户是否登陆,是否在可购买时间内,记录日志信息等。 3.Spring中两种实现方式   通过实现HandlerInterceptor接口, 一般通过继承HandlerInterceptorAdapter抽象类实现。   DispatcherServlet处理流程:DispatcherServlet处理请求时会构造一个Excecution Chain,即(可能多个)拦截器和真正处理请求的Handler 即Interceptor是链式调用的。   preHandle: 在执行Handler之前进行,即Controller方法调用之前执行,主要进行初始化操作。   postHandle: 在执行Handler之后进行,即Controller 方法调用之后执行,主要对ModelAndView对象进行操作。   afterCompletion: 在整个请求结束之后

Spring 梳理 - filter、interceptor、aop实现与区别 -第二篇

情到浓时终转凉″ 提交于 2020-03-05 16:06:30
spring mvc中的Interceptor可以理解为是Spring MVC框架对AOP的一种实现方式。一般简单的功能又是通用的,每个请求都要去处理的,比如判断token是否失效可以使用spring mvc的HanlderInterceptor, 复杂的,比如缓存,需要高度自定义的就用spring aop。一般来说service层更多用spring aop,controller层有必要用到request和response的时候,可以用拦截器。 servlet filter和spring mvc Interceptor区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2.拦截器不依赖与servlet容器,过滤器依赖与servlet容器。 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 6.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。 servlet filter和spring mvc Interceptor执行顺序: ===========before doFilter1 ========

Maven二

跟風遠走 提交于 2020-03-05 15:22:16
1 回顾 1.1 M aven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 M aven安装部署配置 1.3 M aven的仓库 本地仓库 远程仓库(私服) 中央仓库 1.4 添加依赖 从网络上搜索 在本地重建索引,以索引的方式搜索 1.5 项目构建 1.6 依赖范围 Compile struts2 框架jar Provided jsp-api.jar 重点 Runtime 数据库驱动包 Test junit.jar 1.7 总结 <modelVersion> 坐标 GAV <groupId>cn.itcast</groupId> <artifactId>ssh</artifactId> <version>0.0.1-SNAPSHOT</version> Packaging 打包方式 Jar war pom <dependencies> <dependency> <build> 里面放的是插件 <plugins> <plugin> 2 整合ssh框架 2.1 依赖传递 只添加了一个struts2-core依赖,发现项目中出现了很多jar, 这种情况 叫 依赖传递 2.2 依赖版本冲突的解决 1、 第一声明优先原则 <dependencies> <!-- spring-beans-4.2.4 -->

Springboot与springcloud

ε祈祈猫儿з 提交于 2020-03-05 14:22:00
1、什么是Spring Boot? 它简化了搭建Spring项目,自动配置Spring,简化maven配置,自带tomcat无需部署war包,创建独立的spring引用程序main方法运行; 2、Spring Boot优缺点 优点:减少搭建、开发、测试等时间,开发中无需重启Tomcat,maven的依赖管理更易使用; 缺点:不易了解其演变过程与原理; 3、配置文件类型与格式 springboot默认读取配置文件为 application .properties或者是 application .yml app.user.name = javastack或者app: user: name: javastack 4、常用starter(启动器)有哪些? spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持) spring-boot-starter-data-jpa (数据库支持) spring-boot-starter-data-redis (redis数据库支持) spring-boot-starter-data-solr (solr搜索应用框架支持) mybatis-spring-boot-starter (第三方的mybatis集成starter) 5、注解含义 @SpringBootApplication 相当于以下3个注解

跟我猜Spring-Boot:bean的创建

南笙酒味 提交于 2020-03-05 13:47:41
废话在前 最近几年的技术路子很杂,先是node,然后是php,后来是openresty,再后来转到了java,而接触的框架(Framework),也越发的复杂,从最开始的express/koa,到lumen ,再到spring全家桶,各种切换,也确实一度头疼; 一般而言,学习一种技术下的某种框架当然是去读源码,但开源项目动辙几万十几万行,尤其我又是个懒人,实在是没办法分析了解。于是,我选择了另一种方式,即在使用框架过程中去“猜想“,即去思考他应该去怎么实验的; 其实,不停的猜想,然后写小demo去实现,再到框架源码中针对性的找到机制去阅读,也不失为一种乐趣。 出于这种思维,我在工作中不停的接触过往同事的源码,再从源码中学习到spring各种特性的用法,再去猜想,实现,查看代码去验证,也确实为工作添了些许乐趣。出于这种目的,想把自己这些的猜想做一些整理,与大家分享。z 本系列的文章预谋好久,然而一直不知道该如何开始,不如写一篇算一篇。在这些文章中,我将先去写一个spring的应用特性,然后靠“猜想“去将背后的特性实现出来。 那么本篇,从最基本的入口程序开始吧。 从这个入口程序,我们将看到一个spring bean创建的简单机制。 目标 在本篇文章中,我们要实现一个spring的入口程序,即: App.java package com.github.yfge.miniapp;

Spring JDBC Framework

让人想犯罪 __ 提交于 2020-03-05 12:06:44
引自 : 学习经典:Spring JDBC Framework 这里记录我对Spring JDBC框架的学习。由于Spring JDBC和我之前做的工作有很多共同之处,学习经典Framework的设计,取长补短,为我所用。 在这里,先佩服一下Rod JohnSon,他对数据库,JDBC的理解非常深。看Spring jdbc框架的设计和源代码,带给了我很多以前没有想到的东西。 我们知道,Spring JDBC的主要目标是为了简化JDBC的编程,方便我们构建健壮的应用程序。这里,它的一个基本设计理念,就是将JDBC编程中变化的和不变化的分开。 在JDBC中,什么是变化的?毫无疑问,SQL语句是变化的。那什么是不变化的?正确的使用JDBC的方式是不变化的。 先看一段代码。 java 代码 public List getAvailableSeatlds(DataSource ds, int performanceld, int seatType) throws ApplicationException { String sql = "SELECT seat_id AS id FROM available_seats " + "WHERE performance_id = ? AND price_band_id = ?" ; List seatlds = new LinkedList();

Spring Framework 简介

拟墨画扇 提交于 2020-03-05 12:05:40
Spring Framework 依赖注入、事务管理、Web应用程序、数据访问、消息传递、测试和更多的核心支持。 Tips: Spring 官网: https://spring.io/ spring framework 官网: https://projects.spring.io/spring-framework/ 0x01介绍 Spring框架提供了现代的基于java的企业应用程序在任何部署平台的综合规划和配置模型。Spring的一个关键元素是应用程序级的基础设施支持:Spring关注企业应用程序的“管道”,以便团队能够专注于应用级业务逻辑,而不必与特定部署环境不必要的联系。 0x02 功能 核心技术:依赖注入、事件、资源、国际化、验证、数据绑定、类型转换,拼写,AOP。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务、DAO支持、JDBC、ORM、编组XML。 Spring MVC Web框架和 Spring WebFlux web 框架 整合:Remoting、JMS、JCA、JMX、电子邮件、任务调度、缓存。 语言:Kotlin,Groovy动态语言。 0x03 Minimum requirements JDK 8+ for Spring Framework 5.x JDK 6+ for Spring

Spring面试笔记

时光总嘲笑我的痴心妄想 提交于 2020-03-05 12:04:54
1. Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring既是一个AOP框架,也是一IOC容器。 SpringFramework的组成:Spring AOP,Spring DAO,Spring ORM,Spring Web,Spring Context, Spring Web MVC。 Spring的核心就是IOC和AOP,所以Spring的工作机制简单的理解也就是IOC和AOP的工作机制。 借助于Spring AOP,Spring IoC能够很方便的使用到非常健壮、灵活的企业级服务,通过使用IoC能够降低组件之间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整个产品或系统集成和配置。 2. 说说AOP和IOC的概念以及在spring中是如何应用的? AOP,Aspect Oriented Program,面向(方面)切面的编程; IOC,Invert Of Control,控制反转。 简单说一下,IOC就是其实就是依赖注入,即用接口编程,在程序中不出现new关键字,而是用接口来命名引用,然后通过某种方式把接口的某个实现类的实例注入到引用里,从而实现接口与具体实现类的松耦合。 由容器控制程序之间的关系(通过XML配置),而非传统实现中的由程序代码直接操控,(在一个Class对象中引用另一个Class对象时

spring定时任务的几种实现方式

大憨熊 提交于 2020-03-05 11:14:28
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类

Spring定时任务的几种实现

て烟熏妆下的殇ゞ 提交于 2020-03-05 11:07:31
Spring定时任务的几种实现 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式