Spring
文章平均质量分 82
Archie_java
求知若饥,虚心若愚(stay hungry,stay foolish)
好记性不如烂笔头
展开
-
CXFServlet类的作用
CXFServlet是Apache CXF框架中的一个核心组件,用于处理HTTP请求并将它们转换为Web服务调用。通过配置CXFServlet,你可以轻松地部署和管理SOAP和RESTful Web服务。原创 2024-08-14 13:46:54 · 738 阅读 · 0 评论 -
@Scheduled注解的scheduler属性什么作用
注解是 Spring Framework 提供的一种机制,用于定义计划任务,即周期性执行的任务。 注解可以应用于方法上,以指示 Spring 容器在特定的时间间隔或按照某种调度规则来调用该方法。 属性是 注解的一个可选属性,它的作用是允许开发者指定一个自定义的 对象来控制任务的调度方式。默认情况下, 注解使用 Spring 内部的 来执行任务,但如果需要更高级的定制化需求,可以通过 属性指定一个自定义的 实现。自定义调度器:共享调度器资源:高级调度需求:假设你想使用 作为调度器,并且希望所有带有原创 2024-08-05 22:54:19 · 349 阅读 · 0 评论 -
过滤器、拦截器、aop的先后顺序和作用范围&拦截器preHandle(),postHandle(),afterComplation()方法执行顺序
在Spring框架中,过滤器(Filter)、拦截器(Interceptor)和面向切面编程(AOP)都是用于处理请求和处理流程的组件,但它们的作用范围和触发时机有所不同。下面我会解释这三者的先后顺序和作用范围。执行顺序:请注意,这个顺序可能因具体的配置和使用的技术而有所不同。在实际应用中,建议根据项目的具体需求来合理配置和使用这些组件。拦截器执行流程图:实现拦截器需要实现这个接口,这个 接口中有三个默认方法,这三个方法的执行顺序:我们实现接口然后重写这三个方法,就会在对应的时机被自动执行。这里就是调用处理原创 2024-05-05 00:05:37 · 2191 阅读 · 1 评论 -
Spring事务七大传播机制与五个隔离级别,嵌套事务
如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。当前方法必须在一个具有事务的上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。当前方法必须运行在它自己的事务中。一个新的事务将启动,而且如果有一个现有的事务在运行的话,则这个方法将在运行期被挂起,直到新的事务提交或者回滚才恢复执行。原创 2024-05-03 23:59:42 · 1221 阅读 · 0 评论 -
spring.factories文件的作用
即spring.factories文件是帮助spring-boot项目包以外的bean(即在pom文件中添加依赖中的bean)注册到spring-boot项目的spring容器中。在Spring Boot启动时,它会扫描classpath下所有的spring.factories文件,加载其中的自动配置类,并将它们注入到Spring ApplicationContext中,使得项目能够自动运行。spring.factories文件是Spring Boot自动配置的核心文件之一,它的作用是。原创 2024-05-03 23:54:44 · 867 阅读 · 0 评论 -
Spring MVC 和WebFlux 区别
本节主要对比了WebMvc 和 WebFlux两个Web框架,Spring已经为我们开发做了很大努力了,所以在合适的场景下这种异步框架还是非常可行的。但是还要考虑后期其它异步框架是否能够完善,全链路异步才能发挥异步最大的优势。原创 2024-03-02 23:46:01 · 1573 阅读 · 0 评论 -
static final、static、@PostConstruct、构造方法、@AutoWired执行的顺序
Java提供的注解,被用来修饰方法,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。调用的顺序为: 构造函数 > @Autowired > @PostConstruct(2)作用:@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如读取数据字典之类、目录树缓存。原创 2023-12-14 23:29:36 · 589 阅读 · 0 评论 -
Spring中@Autowired注解作用在方法上和属性上说明
换句话说,在Spring创建bean的过程中,会为这个bean中标有@Autowired注解的构造器,变量域,方法和方法参数中自动注入我们需要的已经在Spring IOC容器里面的bean,,而无需我们手动完成,并且注入的bean都是单实例,也就是在两个bean中都依赖第三个bean,那么这两个bean中注入的第三个bean会是同一个bean(JVM中指向的地址相同)。下面进行测试,打印的结果显示可以拿到Wheel类,说明@Autowired注解在IOC容器中只有一个类型的bean时,按照类型进行注入。原创 2023-12-13 21:59:20 · 6531 阅读 · 0 评论 -
详解Spring@AutoWired多种方式的依赖注入——List,Map类型
在Spring框架进行bean对象依赖注入时,@Autowired利用可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。@Autowired可标注在成员变量,也可以标注在成员变量的set方法上,以及类得构造函数上。对于标注在成员变量上的方式,通常的做法是标注在单个类型的变量上,Spring框架提供了强大的DI能力能够实现对Collection类型的自动注入。原创 2023-12-13 22:09:04 · 1741 阅读 · 0 评论 -
Spring+SpringMVC项目中的容器初始化过程,一目了然!
而是因为Listener、Filter、Servlet是Web容器管理的,而bean是Spring容器或SpringMVC容器管理的。9.获取servlet节点信息,创建Servlet实例集合,其中的DispatcherServlet就是用来完成SpringMVC容器(XmlWebApplicationContext)初始化的;5.获取listener节点信息,创建Listener实例集合(开始监听),其中的ContextLoaderListener监听器就是用来完成Spring容器初始化的。原创 2023-10-08 22:24:26 · 221 阅读 · 0 评论 -
都在建议,不要直接使用 @Async 注解,为什么?
自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。重新实现接口AsyncConfigurer继承AsyncConfigurerSupport配置由自定义的TaskExecutor替代内置的任务执行器通过查看Spring源码关于@Async的默认调用规则,会优先查询源码中实现AsyncConfigurer这个接口的类,实现这个接口的类为AsyncConfigurerSupport。原创 2023-09-10 16:20:24 · 451 阅读 · 0 评论 -
Spring HttpMessageConverter的作用及替换解析
在请求进入test方法前,会根据@RequestBody注解选择对应的HttpMessageConverter实现类来将请求参数解析到param变量中,因为这里的参数是String类型的,所以这里是使用了StringHttpMessageConverter类,它的canRead()方法返回true,然后read()方法会从请求中读出请求参数,绑定到test()方法的param变量中。这一过程,在SpringMVC / SpringBoot中,是通过HttpMessageConverter来解决的。原创 2023-09-10 15:56:58 · 184 阅读 · 0 评论 -
Spring 加载Bean的流程
Spring 作为 Ioc 框架,实现了依赖注入,由一个中心化的 Bean 工厂来负责各个 Bean 的实例化和依赖管理。各个 Bean 可以不需要关心各自的复杂的创建过程,达到了很好的解耦效果。解析:读 xml 配置,扫描类文件,从配置或者注解中获取 Bean 的定义信息,注册一些扩展功能。加载:通过解析完的定义信息获取 Bean 实例。Spring总体流程我们假设所有的配置和扩展类都已经装载到了 ApplicationContext 中,然后具体的分析一下 Bean 的加载流程。原创 2023-09-10 00:04:36 · 701 阅读 · 0 评论 -
Spring @Autowired注入类的List,Map
一个回调接口有多种回调逻辑,在项目启动时需要将回调接口的实现类都放到一个list中然后回调每个实现类的具体方法。在Springboot中就可以通过@Autowired来将回调接口的所有实现类进行注入。原创 2023-09-03 23:35:21 · 857 阅读 · 0 评论 -
Field injection is not recommended(不再推荐使用字段注入)禁止在项目中使用 @Autowired 注解?
我们已经看到,基于字段的注入应该尽可能地避免,因为它有许多缺点,无论它看起来多么优雅。推荐的方法是使用基于构造函数和基于setter的依赖注入。对于必需的依赖,建议使用基于构造函数的注入,设置它们为不可变的,并防止它们为null。对于可选的依赖项,建议使用基于sett的注入。原创 2023-09-02 20:13:37 · 265 阅读 · 0 评论 -
解析Spring中@Controller@Service等线程安全问题
在@Controller/@Service等容器中,默认情况下,scope值是单例-singleton的,也是线程不安全的。尽量不要在@Controller/@Service等容器中定义静态变量,不论是单例(singleton)还是多实例(prototype)他都是线程不安全的。默认注入的Bean对象,在不设置scope的时候他也是线程不安全的。一定要定义变量的话,用ThreadLocal来封装,这个是线程安全的。原创 2023-09-02 20:00:30 · 628 阅读 · 1 评论 -
使用Autowired为什么会被IDEA警告,应该怎么修改最佳
先看一下Java初始化类的顺序:父类的静态字段 > 父类静态代码块 > 子类静态字段 > 子类静态代码块 > 父类成员变量 > 父类构造代码块 > 父类构造器 > 子类成员变量 > 子类构造代码块 > 子类构造器。这种方法也使用了@Autowired注解,但是它是作用于成员变量的Setter函数上,而不是像Fied注入一样作用于成员变量上。它的好处在于,采用了构造方法注入,这种方式对对象创建的顺序会有要求,它将避免循环依赖问题。在使用中,使用构造方法是比较可行的,加上lombok,其实也可以到达非常简便。原创 2023-08-05 23:38:00 · 337 阅读 · 1 评论 -
@Transactional注解加不加 rollbackFor = Exception.class 的区别?@Transactional 注解失效的3种原因及解决办法
只能回滚和下面的子类抛出的异常 不能回滚Exception异常如果需要支持回滚Exception异常请用这里如果是增删改的时候我建议大家都使用第一种 Transactional注解标注方法修饰符为非public时,注解将会不起作用。例如以下代码。定义一个错误的标注实现,修饰一个默认访问符的方法} }在同一个包内,新建调用对象,进行访问。//调用@Transactional标注的默认访问符方法 testService . insertTestWrongModifier();} }测试用例。原创 2023-07-07 23:02:57 · 753 阅读 · 0 评论 -
Spring的@Transactional事务是如何实现的
我们知道实现@Transactional原理是基于spring aop,aop又是动态代理模式的实现,通过对源码的阅读,总结出下面的步骤来了解实际中,在spring 是如何利用aop来实现@Transactional的功能的。生成代理对象的代理逻辑中,进行方法调用时,需要先获取切面逻辑,@Transactional注解的切面逻辑类似于@Around,在spring中是实现一种类似代理逻辑。有了切面定义之后,在spring的bean的初始化过程中,就需要对实例化的bean进行代理,并且生成代理对象。原创 2023-07-02 23:53:24 · 270 阅读 · 0 评论 -
Spring源码阅读--aop实现原理分析
这里分析的是,在spring中是如何基于动态代理的思想实现aop的。为了方便了解接下来的源码分析,这里简单化了一个流程图分析aop的基本实现思想。so,基于上面的流程,一步步分析spring源码中的aop实现方式。采用一个简单的aop例子,利用基于注解配置方式的切面配置,分析一个简单的Before AOP例子。在spring boot下运行以下简单例子。AOP的advisor和advice配置。AopObject,被代理拦截对象。原创 2023-06-29 23:22:09 · 113 阅读 · 0 评论 -
Spring源码阅读--@Transactional实现原理
最终可以总结一下整个流程,跟开始的猜想对照。分析源码后对照。原创 2023-06-29 22:59:39 · 413 阅读 · 0 评论 -
Spring依赖注入的三种方式
还是与属性注入的解释是一样的,原因就是JDK是我们最底层的框架,Spring作为上层,要基于JDK/Java的,所以要满足Java的规范,java规定,被final修饰的属性1.在定义的时候进行赋值2.在构造方法内部进行赋值。原因还是一样的,因为满足Java的规范,被final修饰的属性 一个是定义的时候就进行赋值,一个是在构造方法内部进行赋值.满足第二条,所以可以注入final修饰的属性.属性注入的这个属性由于是在Spring中的,所以是可以在其他类里面重复对这个属性进行属性注入的.原创 2023-06-17 17:20:06 · 104 阅读 · 0 评论 -
Spring源码: @Autowired实现原理
目前绝大部分的代码都使用第2、第3种。第1种在bean实例化时完成,而第2、第3种的实现原理都是一样的,在属性填充时完成。本篇将介绍第二第三种的是实现原理在开始之前,如果我们自己设计@Autowired,我们应该怎么实现?我想做法还是比较简单的@Autowired字段方法fieldset。原创 2023-06-17 17:05:20 · 249 阅读 · 0 评论 -
@Value取值为NULL怎么办,解决方案有哪些
类没有加上@Component(或者@service等)类被new新建了实例,而没有使用@Autowired。原创 2023-05-07 23:34:17 · 2637 阅读 · 0 评论 -
Spring中构造方法、@PostConstruct、@Autowired、@Value的加载顺序
@Autowired和@value的加载应该不分先后。原创 2023-04-15 18:48:30 · 953 阅读 · 0 评论 -
【Spring】@Value作用于静态变量
application.yml和application.properties中配置的值都可以通过@Value注解获取;若application.yml和application.properties同时配有同一个变量的值,则以application.yml的值为主;配置文件中的字段名和@Value修饰的属性名可以不一致@Value若从配置文件中获取不到值,则设置的默认值才生效。若配置文件中有配置,则默认值不生效。原创 2023-04-15 18:38:23 · 5513 阅读 · 1 评论 -
【Spring】@Value作用与使用场景详解
不得不说,Spring为大家提供许多开箱即用的功能,@Value就是一个极其常用的功能,它能将配置信息注入到bean中去。即使是一个简单的功能,Spring也提供了丰富的注入类型和形式。我经常会忘记一些特别类型注入的写法,比如说数组,现在整理一下,希望以后不用再找了。原创 2023-04-15 17:55:38 · 878 阅读 · 0 评论 -
Spring只能注入接口,不能注入实现类
4, 没有什么设计是万能的,根据实现情况来决定,一接口对应一个实现类的,直接用注解吧,真到了需要多个实现的时候,注解可以取注入的别名来指定实现类,也可以像以前一样配置在XML中, 并不冲突!3,注解出现后,多是在java文件中用注解注入,方便省事,而且一般来说,spring带了一种设计思想,但实际上在配置文件中真正需要切换的并不多,所以为了方便,又使用了注解这种硬编码;2, spring依赖注入设计思想内就是利用java的多态特性,减少耦合,在配置文件中通过配置,这样注入就没有问题,原创 2022-10-16 23:59:37 · 308 阅读 · 0 评论 -
Spring注入接口还是实现类,同一接口有多个实现类,如何注入
1、接口:IUserService2、实现类:UserServiceImpl,实现了UserService接口3、业务类:Controller假如有一个接口 IUserService, UserServiceImpl类实现了接口 UserServiceImpl, 且该接口只有 UserServiceImpl这一个实现类,那么在引用实现类的时候,我们使用的是实现类的接口(像上面程序展示的那样)。Spring会按 byType的方式寻找接口的实现类,将其注入。原创 2022-10-15 23:58:55 · 2606 阅读 · 0 评论 -
聊聊@Autowired注解注入,写接口名字还是实现类的名字
如果Spring配置了component scan,并且要注入的接口只有一个实现的话,那么spring框架可以自动将interface于实现组装起来。在 com.system.service 下有一个接口类,在 com.system.service.impl 下有一个接口对应的实现类,且该实现类用 @Service 注解进行了标注。这一点如果是用xml配置是不存在这样的问题,因为xml可以指定id, id 是接口,class指向实现类。-----上面是某位同学的提问,我也有这样的疑问----转载 2022-10-15 23:58:24 · 229 阅读 · 0 评论 -
Spring工具类:FileCopyUtils、StreamUtils
Spring 在 org.springframework.util 包提供了很多实用的工具类。今天关心一下Copy。原创 2022-10-10 00:00:15 · 2800 阅读 · 4 评论 -
Spring自带工具类(断言、ObjectUtils、FileCopyUtils、ResourceUtils、StreamUtils、ReflectionUtils、AopUtils、AopCont)
【代码】Spring自带工具类(断言、ObjectUtils、FileCopyUtils、ResourceUtils、StreamUtils、ReflectionUtils、AopUtils、AopCont)原创 2022-10-10 00:11:57 · 503 阅读 · 0 评论 -
Spring 官方修复零日漏洞,推出 Spring Boot 2.6.6、2.5.12 等新版本
一、漏洞说明这个漏洞还要从 3 月 29 日晚间说起。彼时有不少网友爆料,Spring 框架出现 “史诗级” RCE 漏洞,平地一声雷,一时之间,快要入睡的开发者们纷纷坐起查看关于漏洞的情况,闹得技术圈中人心惶惶。不过有些不同寻常的是,这个漏洞并没有像 Log4j2 事件那样引起圈内诸多企业大厂的紧急行动,甚至连国外披露漏洞的根源也是来自 QQ 和国内部分网络安全网站。Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响这也让不少网友猜测,该漏洞应该是国内某个安全机构、安全人员最先原创 2022-05-23 11:47:09 · 1746 阅读 · 0 评论 -
@Value(“#{}“)与@Value(“${}“)的区别
@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量用 @Value(“${xxxx}”)注解从配置文件读取值的用法一、 @Value(“#{}”)1 @Value(“#{}”) SpEL表达式(https://blog.csdn.net/ya_1249463314/article/details/68484422)@Value(“#{}”) 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以.原创 2022-05-18 23:45:54 · 974 阅读 · 0 评论 -
Spring 官方证实:框架爆大漏洞,JDK 9 及以上版本均受影响
继 Log4j 2 之后,听闻 Java 再次遭到漏洞攻击,这一次,似乎情况也更为严重,因为受到影响的是 Java 平台的开源全栈应用程序框架和控制反转容器实现——Spring 家族,而且网传漏洞还不止一个。一直以来,Spring 是编程开发的必选技术之一,此前一位名为 Bogdan N. 的全栈开发者甚至评价道:“学习 Java、学习 Spring 框架,你永远都不会失业。”可想而知,如果 Spring 城门失火,Java 必定遭殃。据悉,3 月 30 日,国家信息安全漏洞共享平台(CNVD)接收到蚂转载 2022-04-02 22:39:18 · 1474 阅读 · 0 评论 -
@SuppressWarnings使用的正确姿势
@SuppressWarnings比较常见,理解和使用起来都很简单。但是就这这个机会系统的整理一下。通过源码可以看出,支持在类、属性、方法、参数、构造方法、本地变量上使用。@SuppressWarnings注解的使用有三种:@SuppressWarnings(“unchecked”) [抑制单类型的警告]@SuppressWarnings(“unchecked”,“rawtypes”) [抑制多类型的警告]@SuppressWarnings(“all”) [ 抑制所有类型的警告]下原创 2022-01-08 20:50:02 · 552 阅读 · 0 评论 -
controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常
controller的异常处理以及service层的事务控制最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看。还是基于controller-service-dao三层来写代码,从入口开始,controller层的方法对应的是某个url,面向的是应用人员,应该返回他们能读懂的信息,所以controller必须做异常处理,一般来说会有统一的异常处理方法;service层面向的是controller,service层中的某些方法,必须保原创 2022-01-02 00:25:46 · 8002 阅读 · 2 评论 -
SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚
Springboot中事务的使用:1、启动类加上@EnableTransactionManagement注解,开启事务支持(其实默认是开启的)。2、在使用事务的public(只有public支持事务)方法(或者类-相当于该类的所有public方法都使用)加上@Transactional注解。在实际使用中一般是在service中使用@Transactional,那么对于controller->service流程中:如果controller未开启事务,service中开始了事务,service成功原创 2022-01-01 18:48:59 · 835 阅读 · 0 评论 -
SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别
SpringAop与AspectJ的联系与区别区别AspectJAspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。spring aopSpring提供了四种类型的Aop支持* 基于经典的SpringAOP* 纯POJO切面* @ASpectJ注解驱动的切面* 注入式AspectJ切面(其实与Spring并无多大的关系,这个就是使用AspectJ这个框架实现Aop编程)基于经典原创 2021-12-18 10:14:57 · 940 阅读 · 0 评论 -
Spring系列:父子容器详解
又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是controller层交给一个spring容器加载,其他的service和dao层交给另外一个spring容器加载,web.xml中有这块配置,这两个容器组成了父子容器的关系。我:哦,原来是这块啊,我想起来了,我看大家都这么用,所以我也这么用面试官:有没有考虑过为什么?我:我在网上看大家都这么用,所以我也这么用了,具体原创 2021-12-18 09:53:43 · 5144 阅读 · 7 评论