![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring框架
文章平均质量分 90
爱叨叨的程序狗
码农,不只Coding.
展开
-
深入分析 Spring 中 Bean 名称的加载机制
深入分析-Spring BeanDefinition构造元信息》XML配置文件、注解、Java配置类,从Spring Framework 3.0(2019年12月发布)版本开始推荐使用注解来定义Bean,而不是XML配置文件,因此,本文的重点是放在探索Spring Framework如何从使用注解定义的Bean元数据中获取到Bean的名称。在Spring Framework中用于生成基于注解的Bean名称,其主要作用是根据指定的注解信息,生成符合规范的Bean名称。原创 2024-01-13 22:39:29 · 969 阅读 · 0 评论 -
深入分析-Spring BeanDefinition构造元信息
/value = “HelloService” 即为Bean:HelloService的元数据,在构造方法中的依赖关系同样属于元数据。@Component(value = “balanceRedisProcessor”) 是Bean:BalanceRedisProcessorService的元数据,在构造方法中的依赖关系同样属于元数据。return id;// 2. 通过 AbstractBeanDefinition 以及派生类。原创 2024-01-07 14:49:18 · 1015 阅读 · 1 评论 -
探秘Spring中的BeanDefinition:每个Bean都是一个独特的“小镇居民”
在Spring框架中,核心思想之一就是将应用程序中的各种组件,例如对象、服务、数据源等,都抽象为Spring Bean,并将它们注册到Spring容器中。这种注册的方式提供了一种基于IoC(Inversion of Control,控制反转)的管理方式,即不再由应用程序主动去创建和管理对象,而是由Spring容器负责管理和注入这些对象。而BeanDefinition是用来描述和定义Bean的元数据对象。BeanDefinition包含了关于Bean的各种信息,如类名、属性值、构造函数参数等。原创 2024-01-04 09:08:29 · 923 阅读 · 0 评论 -
Spring Framework中BeanFactory与ApplicationContext的关系与区别
首先来看来自官方文档的描述:我们来翻译一下:beans和context是Spring Framework的IoC容器的基础。BeanFactory接口提供了一种高级配置机制,能够管理任何类型的对象。IoC(Inversion of Control)是Spring Framework的核心设计思想:它将对象的创建、组装、管理交给容器(container),BeanFactory提供了访问IoC的接口,使得开发者可以更方便的使用Spring框架来实现控制和依赖注入。原创 2023-12-23 17:55:40 · 862 阅读 · 0 评论 -
Spring Framework IoC依赖注入-按Bean类型注入
依赖注入是一种先进的设计思想,它通过外部注入依赖对象来实现组件之间的松耦合。在 Spring 框架中,依赖注入的核心实现便是通过控制反转(Inversion of Control,IoC)容器。IoC 容器负责实例化、配置和组装应用中的对象,并在需要时将它们智能地注入到其他对象中。相较于传统的面向对象思想,当业务代码变得复杂时,通过直接使用new进行对象构造对象间的关系,容易导致代码耦合度的上升。Spring 通过控制反转巧妙地解决了这一问题,运用了好莱坞原则的理念:不要给我们打电话,我们会给你打电话。原创 2023-11-21 21:44:58 · 307 阅读 · 0 评论 -
Spring Framework IOC依赖查找 - 按类型查找解析
AppConfig配置类定义了两个名为"bean1"和"bean2"的MyBean类型的Bean,这两个类分别有不同的实现逻辑,在不同的逻辑中去调用。原创 2023-11-20 17:26:50 · 97 阅读 · 0 评论 -
Spring Framework IOC依赖查找 - 按名称查找解析
具体来说,在使用ApplicationContext作为容器时,如果不显式地配置为延迟初始化,那么所有的单例bean都会在容器启动时被实例化。是指在需要使用某个资源或对象时才进行加载,而不是在应用程序启动时就提前加载。在Spring Framework中,实时加载和延迟加载是指在容器启动时是否立即实例化bean的不同策略。的维护者,一个跨专业自学Java,对技术保持热爱的bug猿,同样也是在某二线城市打拼四年余的Java Coder。在实际应用中,根据具体的需求和场景来选择合适的加载方式是非常重要的。原创 2023-11-19 15:22:14 · 101 阅读 · 0 评论 -
Spring Framework中的依赖注入:构造器注入 vs. Setter注入
构造器注入和Setter注入是依赖注入(Dependency Injection,DI)中两种常见的方式,用于向一个对象注入其所依赖的其他对象或数值。这两种注入方式有各自的特点和用途。总结以上论点就是:通过构造器注入对象,实现了对象初始化后的不可变性,同时确保所需依赖不为空。这有助于保持对象状态的稳定性。通过构造器注入,可以清晰地看到类的依赖关系,大量构造器参数说明当前类耦合过多、职责过多,从而促使编码者考虑是否需要重构,以提高代码质量和可维护性。原创 2023-11-14 21:31:49 · 221 阅读 · 0 评论 -
从源码中看@Qualifier注解
Qualifier注解通常和@Autowired注解一起使用,那么首先来看@Autowire是怎么把Bean对象注入到Spring容器中的。原创 2023-11-05 16:53:06 · 182 阅读 · 0 评论 -
深入解析 Spring Framework 中 @Autowired 注解的实现原理
Autowired注解在Spring中的作用是实现依赖注入(Dependency Injection),它用于自动装配(autowiring)Spring Bean 的依赖关系。具体来说,@Autowired自动装配依赖:通过在类的字段、构造函数、方法参数等地方使用@Autowired注解,Spring 容器会自动识别需要注入的依赖,并将适当的 Bean 实例注入到目标组件中。减少手动配置:使用@Autowired。原创 2023-10-30 12:02:11 · 440 阅读 · 0 评论 -
Spring Framework核心模块
BeanFactory通过Autowire实现依赖注入,AutowiredAnnotationBeanPostProcessor是@Autowire注解的实现类,它是一个后置处理器,用于在Bean实例化后对标记了@Autowired注解的字段、构造函数或方法进行依赖注入。它会扫描Bean中的@Autowired注解,解析注解所标记的依赖关系,并将相应的依赖对象注入到对应的位置。通过依赖查找,可以在需要的时候动态的获取所需的依赖对象,并在代码中使用。它可以根据指定的文件路径来加载文件系统中的资源。原创 2023-08-22 22:04:54 · 210 阅读 · 0 评论 -
SpringBoot MDC全局链路解决方案
Filter是Java Servlet 规范定义的一种过滤器接口,它的主要作用是在 Servlet 容器中对请求和响应进行拦截和处理,实现对请求和响应的预处理、后处理和转换等功能。通过实现 Filter 接口,开发人员可以自定义一些过滤器来实现各种功能,如身份验证、日志记录、字符编码转换、防止 XSS 攻击、防止 CSRF 攻击等。那么这里我们使用它对请求做MDC赋值处理。原创 2023-08-08 22:12:52 · 932 阅读 · 0 评论 -
fix bug:解决在Spring项目实践中LocalDateTime无法序列化反序列化的问题
概述-本文的意义JDK 8发行已久,其中不乏一些在实际编码过程中是十分好用的新特性,如JDK 8中的时间特性亦是如此,但是在Spring企业开发中,往往会遇到LocalDateTime无法序列化/反序列化的问题,原因是LocalDateTime类型的值在当前的JSON工具中并没有特定的模式去解析该类型。那么解决该问题最简单的方式是使用@JsonFormat固定一个pattern即可。当时这个注解存在的弊端即为每一个LocalDateTime类型的参数上都需要一个注解,所以当代码量较大时,工作量就会变大,并原创 2021-08-01 12:16:23 · 2475 阅读 · 0 评论 -
fix bug:Spring中事务不生效的问题
事务注解不生效的问题出现该问题的主要原因主要有两点:Spring的事务没有生效出现异常时无法正常回滚Spring事务不生效的情况@Transactional用在非public方法上未通过代理手段调用事务方法事务注解用在非public方法上@Transactionalprivate Access createRecords(AccessDto accessDto);未通过代理调用的情况:Service正常注入Spring中,在调用方法时使用This调用事务方法,Spring不会注原创 2021-07-08 14:14:05 · 202 阅读 · 0 评论 -
Java中的动态代理
Java中的动态代理实现动态代理方式Java中的代理方式主要分为两种,一种是基于接口的动态代理,另一种是基于类的动态代理,而基于接口的动态代理有JDK Proxy,基于类的动态代理主要有ASM、cglib,本文主要讲述的是JDK Proxy实现动态代理。JDK动态代理实现JDK动态代理基于拦截器和反射实现,使用JDK代理时需要传入被代理类的class。JDK代理的步骤创建接口类,并实现接口自定义Handler去实现JDK的InvocationHandler接口在invoke方法中写入自定原创 2021-03-06 16:58:00 · 100 阅读 · 0 评论 -
SpringBoot整合Redis、MyBatis-Plus
最近笔者在搭一个自己的小框架,基于SpringBoot全家桶整合了SpringSecurity、Redis、MyBatis-Plus、RSA加密等,所以我打算将搭建过程记录下来以做学习只用,好了废话不多说,下面开始。针对Redis在项目中的使用场景,最基础的便是存取用户登录凭证----token,所以必须使用数据库去查询登录用户信息,那么文章就先从整合MyBatis-Plus开始。SpringBoot整合MyBatis-Plus写在前面:MyBatis-Plus是一个非常强大且轻量的ORM框架,原创 2020-12-15 23:06:10 · 1004 阅读 · 1 评论 -
RBAC权限---SpringBoot整合Security
引入SpringSecurity模块 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>加入这个依赖后表示所有的接口都是被保护的状态,访问的时候被Securi原创 2020-12-13 21:47:54 · 366 阅读 · 0 评论 -
如何在Spring中优雅的使用单例模式?
返璞归真单例模式设计模式之初,是脱发的万恶之源,手动滑稽。Java使用构造方法去创建对象可以有三种方式:使用new关键字使用Class.getInstance(通过反射调用无参构造方法)使用Constructor.newInstance(实则也是通过反射的方式调用任何构造方法)单例模式私有化了构造方法,所以其他类无法使用通过new的方式去创建对象,在其他类使用该类的实例时,只能通过getInstance去获取。但是可以通过Constructor反射的方式获取私有化的构造器然后通过构造方法去创原创 2020-12-02 23:46:20 · 1603 阅读 · 1 评论 -
BeanUtils.copyProperties知多少?
事出有因近期在读《阿里巴巴开发手册》的时候发现:阿里强制避免使用BeanUtils进行属性的拷贝,但是不得不承认的是,在我自己的项目中确实使用过Apache的Beanutils进行属性拷贝,在读了开发手册后,感觉项目中的代码可以优化一下,基于不同包下的BeanUtils性能和特性有所不同,当然用法也不尽相同,所以,可以你可能会跳入因为导错包导致对象拷贝为null的坑。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBUkz72I-1606834874223)(C:\Use原创 2020-12-01 23:03:18 · 1873 阅读 · 3 评论 -
AOP前切、后切、环绕demo
Joint Point程序中可识别的点,这个点可以作为AOP的切入点,JointPoint对象则包含了和切入相关的很多信息。比如切入点的对象,方法,属性等。我们可以通过反射的方式获取这些点的状态和信息,用于追踪tracing和记录logging应用信息。Joint Point可提供的信息:# 返回目标对象,即被代理的对象Object getTarget();# 返回切入点的参数Object[] getArgs();# 返回切入点的SignatureSignature getSignatu原创 2020-11-21 21:51:00 · 1518 阅读 · 1 评论 -
Assert断言
Assert断言关键字:一、断言的作用Assert关键字是在JDK1.4之后出现,使用Java中的 assert 语句实现,配合布尔表达式一起使用,达到调试程序开发过程中的判断、调试程序的作用。 在执行断言时,它被认为是正确的。 如果失败,JVM会抛出一个名为 AssertionError 的错误。 断言是默认关闭的,如果想使用断言进行判断,需要手动打开断言功能。如果要开启断言检查,则需使用-enableassertions 或 -ea JVM参数来开启;如果要手动忽略断言检查,则可以通过使用 -dis原创 2020-11-16 21:00:45 · 585 阅读 · 0 评论 -
UnsatisfiedDependencyException
UnsatisfiedDependencyException(无法启动):has been injected into other beans [xxx] in its raw version as part of a circular reference问题出现的原因1、原因: AdminServiceImpl 类中注入了 IPlateDeclareService , 而在 IPlateDeclareService 类中也注入了 IPlateDeclareService ,从而引起该异常。 (循环引原创 2020-09-17 14:32:52 · 14021 阅读 · 1 评论 -
Spring中@Component和@Bean
Spring管理Bean的方式注册Bean装配BeanSpring实现管理的方式自动配置(隐式)使用JavaConfig的方式(显式)使用XML配置的方式(显式)引用自:《Spring实战(第四版)》自动配置:让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring上下文中寻找匹配的某个bean需求的其他Bean。Spring从两个角度来实现自动配置组件扫描(component):Spriing自动发现应用上下文中所创建的bean自动装配(aut原创 2020-08-30 20:07:02 · 2124 阅读 · 0 评论 -
MVC设计模式及流程
MVC设计模式:概述:是一种开发结构合理、能使前后端分离、流程控制逻辑、业务逻辑调用与展示逻辑分离,实现高内聚,低耦合的设计模式。M:模型(Model):数据模型,提供要展示的数据,包括数据(JavaBean)和行为(数据处理)。V:视图(View):视图层:客户端用户能直接看到的页面,主要有模型的展示。C:控制 (Controller):接受用户请求,参数的提交和页面的响应,委托...原创 2019-02-11 22:00:20 · 5603 阅读 · 0 评论 -
Spring MVC框架浅析
概述:是一种开发结构合理、能使前后端分离、流程控制逻辑、业务逻辑调用与展示逻辑分离,实现高内聚,低耦合的设计模式。M:数据实体模型(Model):每一个类的成员变量字段对应数据库字段对应(对应的Entity、JavaBean),提供数据的CRUD操作,实现数据库的持久化。V:视图(View):视图层:客户端用户能直接看到的页面,主要负责视图的展示。视图层调用控制层(HTML、JSP等文件...原创 2019-08-16 17:27:51 · 173 阅读 · 0 评论