Spring
文章平均质量分 86
JFS_Study
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
展开
-
SpringBean 的生命周期
一、InnoDB 一棵 B+ 树可以存放多少行数据约 2 千万。为什么?这是可以算出来的,要搞清楚这个问题,先从 InnoDB 索引数据结构、数据组织方式说起。计算机在存储数据的时候,有最小存储单元,这就好比今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)的最小单元是块,一个块的大小是 4K。InnoDB 存储引擎也有自己的最小储存单元——页(Page),一个页的大小是 16K。文件系统中一个文件大小只有 1原创 2022-02-11 13:53:59 · 405 阅读 · 0 评论 -
增强的@Controller:@ControllerAdvice
一、@ControllerAdvice 增强的@Controller@ControllerAdvice,可以实现三个方面的功能:全局异常处理全局数据绑定全局数据预处理灵活使用这三个功能,可以简化很多工作。需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用,下面分别来看。二、全局异常处理使用 @ControllerAdvice 实现全局异常处理。只需要定义类,添加该注解即可定义,方式如下:@ControllerAdvicepublic clas原创 2021-07-04 00:03:28 · 664 阅读 · 2 评论 -
Spring Boot
Spring Boot最核心的三大注解一、什么是 Spring Boot?由于功能的迭代,Spring 变得越来越复杂。访问https://spring.io/projects,可以看到所有在应用程序中使用的不同功能的 Spring 项目。如果启动一个新的 Spring 项目,必须添加构建路径或 maven 依赖项,配置 application server,添加 spring 配置。因此,启动一个新的 Spring 项目需要大量的工作,因为必须从头开始做所有事情。Spring Boot 是这个问题的解原创 2022-01-13 13:43:39 · 448 阅读 · 0 评论 -
理解 Spring IOC
#依赖注入是一种实现,而 IOC 是一种设计思想。一、IOC是什么?IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建。解读:提到控制就要理解控制的含义,控制就是对象的创建原创 2021-07-04 00:03:35 · 146 阅读 · 0 评论 -
SpringMVC
SpringMVC 是一个 MVC 的开源框架。SpringMVC 是 Spring 的一个后续产品,其实就是 Spring 在原有基础上,又提供了 web 应用的 MVC 模块,可以简单的把 SpringMVC 理解为是 Spring 的一个模块(类似AOP,IOC这样的模块),常说 SpringMVC 与 Spring 无缝集成,其实 SpringMVC 就是 Spring 的一个子模块,所以根本不需要同 Spring 进行整合。原创 2021-07-04 00:03:14 · 419 阅读 · 0 评论 -
Spring的@Order
一、简述注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响。值越小拥有越高的优先级,可为负数。例如:@Order(-1)优先于@Order(0)@Order(1)优先于@Order(2)1️⃣@Order的注解源码解读@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, Elemen原创 2022-01-20 09:46:04 · 2284 阅读 · 0 评论 -
Spring 循环依赖(circular dependency)
一、什么是循环依赖循环依赖即循环引用,形成闭环。比如,A 依赖 B,B 又依赖 A,形成了循环依赖;或者 A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖;更或者是自己依赖自己。如图:这不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。Spring 循环依赖场景有:构造器的循环依赖构造器依赖 + field/setter 依赖(A 的构造器依赖 B,B 的 field/setter 依赖 A)field 依赖或者 setter 依赖具体情况如下:原创 2022-01-18 16:10:50 · 1701 阅读 · 0 评论 -
@Autowired、@Resource、@Inject和@Service
一、区别总结1️⃣@Autowired 是 Spring 自带的,通过AutowiredAnnotationBeanPostProcessor类实现的依赖注入,Spring 属于第三方的。@Resource 是 JSR250 规范的实现,J2EE 的注解,在javax.annotation包下,根据导入注解的包名就可以知道。J2EE 是 Java 自己的,建议使用 @Resource 注解,以减少代码和 Spring 之间的耦合。@Inject 是 JSR330 规范实现的,需要导入javax.i原创 2021-07-05 09:29:56 · 840 阅读 · 1 评论 -
Spring Security中@PreAuthorize、@PostAuthorize、@PreFilter和@PostFilter
一、Spring Security中可以通过表达式控制方法权限Spring Security中定义了四个支持使用表达式的注解,分别是@PreAuthorize、@PostAuthorize、@PreFilter和@PostFilter。其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤。要使它们的定义能够对方法的调用产生影响,需要设置global-method-security元素的pre-post-annotations=”enabled”,默认为di原创 2021-07-05 09:29:41 · 1812 阅读 · 1 评论 -
优雅的全局异常处理
一、统一异常处理软件开发过程中,难免需要处理各种异常,代码中就会出现大量的try {…} catch {…} finally {…} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。那么问题来了,如何优雅的处理各种异常?Spring在3.2版本增加了一个注解@ControllerAdvice,可以与@ExceptionHandler、@InitBinder、@ModelAttribute 等注解注解配套使用。不过跟异常处理相关的只有注解@ExceptionHandler,从字面上看,就是异常处理原创 2021-07-05 09:29:24 · 536 阅读 · 0 评论 -
自定义注解@interface
一、简述使用 @interface 自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface 用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过 default 来声明参数的默认值。定义注解格式:public @interface 注解名 {定义体原创 2021-07-05 09:29:03 · 275 阅读 · 0 评论 -
Spring 注入 bean 的 set 方法不能是 static 的
一、简述静态方法是属于类(class)的,普通方法属于实体对象(也就是 new 出来的对象)。Spring注入是在容器中实例化对象,所以不能使用静态方法。在Springframework里,不能@Autowired一个静态变量,使之成为一个Spring bean。例如下面这样:@Autowired private static OurBean ourBean; ourBean在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静原创 2021-07-05 09:28:33 · 990 阅读 · 0 评论 -
SpringBoot与SpringMVC的区别
SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化日常Web开发的,后来随着自身的发展,SpringMVC变得臃肿复杂,而SpringBoot则进一步简化了SpringMVC开发。SpringMVC为Java Web而生。SpringBoot是基于SpringMVC无配置文件(纯Java,完全注解化) + 内置tomcat-embed-core实现的Java Web框架。当然,SpringBoot也可以开发非Web应用,理原创 2021-07-05 09:27:53 · 4036 阅读 · 0 评论 -
@RequestParam、@PathVariable、@RequestBody和@Param
一、@RequestParam顾名思义:获取参数,即获取传送过来的参数。例如获取下面链接的id参数值://链接(注意链接格式区别)http://localhost:8080/hello?id=6//使用@RequestParam注解获取idpublic String getParam(@RequestParam String id){ System.out.println("链接中请求参数的id:"+id); return null;}此时 @RequestParam 的作用原创 2021-07-05 09:27:34 · 825 阅读 · 0 评论 -
@RequestBody与@RequestParam
一、基础知识介绍1️⃣@RequestBody主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据)2️⃣因为GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。3️⃣在后端的同一个接收方法里,@RequestBody与@RequestParam可以同时使用。4️⃣一个请求,只能有一个@RequestBody,却可以有多个@RequestParam。5️⃣当同时使用@RequestParam和@RequestBo原创 2021-07-05 09:27:10 · 1252 阅读 · 0 评论 -
@RestController与@Controller
1. 使用`@Controller`注解在方法上,视图解析器可以解析 return 的 jsp、html 页面,并且跳转到相应页面。若要返回 json 等内容到页面,则需要加`@ResponseBody`。2. 使用`@RestController`,返回 json 数据不需要在方法前面加`@ResponseBody`。但使用其,就不能返回 jsp、html 页面,视图解析器无法解析。原创 2021-07-05 09:26:56 · 1399 阅读 · 0 评论 -
spring-mvc.xml与applicationContext.xml的区别
一、用途不同applicationContext.xml文件通常用于加载spring系统级别的组件,比如bean的初始化。spring-mvc.xml文件通常用于加载controller层需要的类,比如拦截器,mvc标签加载的类。二、加载位置不同applicationContext.xml加载在标签中,作为FrameworkServlet的参数属性。spring-mvc.xml文件当做DispatcherServlet的参数属性进行加载。applicationContext.xml是全局的,应用原创 2021-07-02 10:27:56 · 995 阅读 · 0 评论 -
Spring定时任务的几种实现
一、应用场景定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券;比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作;比如一些定时需要生成的报表、邮件;比如一些需要定时清理数据的任务等。二、分类1️⃣从实现的技术上来分类,主要有三种(或者说有三种产品):Java 自带的java.util.Timer类,这个类允许调度一个java.util.TimerTask任务。使用这种方式可以让程序按照某一个频度执行,但不能在指定时间运行。一原创 2021-07-02 10:25:38 · 12852 阅读 · 1 评论 -
Spring Bean 的五个作用域
一、作用域(scope)和生命周期作用域作用域限定了 Bean 的作用范围。在 Spring 配置文件定义 Bean 时,通过声明 scope 配置项,可以灵活定义 Bean 的作用范围。例如,当希望每次 IOC 容器返回的 Bean 是同一个实例时,可以设置 scope 为 singleton;当希望每次 IOC 容器返回的 Bean 实例是一个新的实例时,可以设置 scope 为 prototype。scope 配置项有 5 个属性,用于描述不同的作用域:singleton、prototype、re原创 2021-07-02 10:22:07 · 2802 阅读 · 0 评论