
Spring
文章平均质量分 95
Java技术债务
坚决不留下一个技术债务,欢迎关注:Java技术债务!
展开
-
Java中CAS机制详解
传统的并发控制手段,如使用关键字或者等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换、锁竞争导致的线程阻塞等。而此时就出现了一种乐观锁的策略,以其非阻塞、轻量级的特点,在某些场合下能更好地提升并发性能,其中最为关键的技术便是Compare And Swap(简称CAS)。CAS是一种无锁算法,它在硬件级别提供了原子性的条件更新操作,允许线程在不加锁的情况下实现对共享变量的修改。在Java中,CAS机制被广泛应用于包下的原子类以及高级并发工具类如(AQS)的实现中。原创 2024-06-06 16:53:31 · 10459 阅读 · 2 评论 -
Java反射Reflect机制详解
Java反射是一个强大的工具,极大地增强了Java语言的动态性和灵活性。然而,在使用反射时需要权衡其性能开销和安全风险。Java反射有优点也有缺点,从整体上看,Java反射是以牺牲了小部分的性能换取了更好的扩展性和灵活性,牺牲小我成就大我,而且,随着现代硬件设备能力越来越强,这点小性能的牺牲是完全值得的。理解反射的原理和使用场景,可以更好地应用反射技术来解决实际开发中的问题。原创 2024-06-06 16:49:59 · 1186 阅读 · 0 评论 -
Spring事件ApplicationEvent源码浅读
Spring 使用反射机制,获取了所有继承 ApplicationListener 接口的监听器,在 Spring 初始化时,会把监听器都自动注册到注册表中。定义一个继承ApplicationEvent的事件;定义一个实现ApplicationListener的监听器或者使用@EventListener监听事件;定义一个发送者,调用ApplicationContext直接发布或者使用ApplicationEventPublisher来发布自定义事件;原创 2023-10-17 19:09:18 · 19153 阅读 · 1 评论 -
从注解@EventListener和@TransactionalEventListener掌握Spring的事件机制原理
Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式;为的就是业务系统逻辑的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。在Spring中我们可以通过实现接口或者接口来实现事件驱动编程。比如我们做一个电商系统,用户下单支付成功后,我们一般要发短信或者邮箱给用户提示什么的,这时候就可以把这个通知业务做成一个单独事件监听,等待通知就可以了;把它解耦处理。Spring事件类自定义类描述运行程序上下文。原创 2023-05-23 16:24:28 · 2872 阅读 · 0 评论 -
Spring事务传播行为,事务隔离级别以及事务失效的场景
@Transactional注解,事务的传播行为,事务失效的原因,事务为什么失效,事务的隔离级别原创 2022-11-02 20:05:10 · 1299 阅读 · 1 评论 -
定时任务注解@Scheduled
概述要使用@Scheduled注解,首先需要在启动类添加@EnableScheduling,启用Spring的计划任务执行功能,这样可以在容器中的任何Spring管理的bean上检测@Scheduled注解,执行计划任务。注解定义/** * An annotation that marks a method to be scheduled. Exactly one of * the {@link #cron()}, {@link #fixedDelay()}, or {@link ...原创 2021-11-25 23:13:14 · 2653 阅读 · 0 评论 -
23种设计模式之装饰者模式
装饰者模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。原创 2022-07-17 22:30:03 · 301 阅读 · 0 评论 -
23种设计模式之适配器模式
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。其中对象的适配器模式是各种模式的起源。**适配器模式(Adapter Pattern)**是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器类适配器模式可采用多重继承方式实现原创 2022-07-10 21:24:43 · 388 阅读 · 0 评论 -
23种设计模式之建造者模式
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为**建造者模式**。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。......原创 2022-07-04 23:17:05 · 544 阅读 · 0 评论 -
23种设计模式之代理模式
在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式的主要优点有:其主要缺点是:那么如何解决以上提到的缺点呢? 答案是可以使用动态代理方式代理模式的结构比较简单,主要是通过定义一个继承抽象主题的代理来包含真实主题原创 2022-06-30 20:35:17 · 627 阅读 · 0 评论 -
Spring Security认证和授权(二)
文章目录1. 默认数据库认证和授权1.1 资源准备1.2 资源授权的配置1.3 基于内存的多用户支持1.4 认证和授权1.4.1 数据库准备1.4.2 编码2. 自定义数据库模型的认证与授权2.1 实现UserDetails2.2 数据库以及表准备2.3 实现UserDetailsService2.4 启动程序测试1. 默认数据库认证和授权1.1 资源准备首先准备三个不同权限的接口@GetMapping("/admin/test")@ResponseBodypublic String admi.原创 2022-03-27 23:12:13 · 4836 阅读 · 0 评论 -
Spring Security初识和表单认证(二)
1. Spring Security简介Spring Security 的前身是 Acegi Security,在被收纳为Spring子项目后正式更名为Spring Security。应用程序的安全性通常体现在两个方面:认证和授权。认证是确认某主体在某系统中是否合法、可用的过程。这里的主体既可以是登录系统的用户,也可以是接入的设备或者其他系统。授权是指当主体通过认证之后,是否允许其执行某项操作的过程。这些概念并非Spring Security独有,而是应用安全的基本关注点。Spring S.原创 2022-03-26 23:19:56 · 3979 阅读 · 0 评论 -
Spring Boot或Spring MVC前后端分离的项目跨域问题的解决方案
文章目录源和跨域同源策略CORS-跨域资源共享简单请求非简单请求跨域解决方案源和跨域源(origin)就是协议、域名和端口号。URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口全部相同,则表示他们同源。跨域协议、域名、端口有任何一个不同那么跨域问题就是CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访.原创 2022-03-14 22:05:28 · 1287 阅读 · 0 评论 -
Spring bean的生命周期
对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收。而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制。bean的声明bean的声明有好几种,如上图。上图声明的一些bean信息可以通过ClassPathXmlApplicationContext(bean.xml)进行加载解析配置信息源码:// Tell the subclass to refresh the internal bean factory.//告诉子类刷新内部bean工厂,加原创 2022-02-02 23:56:05 · 1723 阅读 · 0 评论 -
面试之Spring的启动原理
引入为什么突然说一下Spring启动原理呢,因为之前面试的时候,回答的那可谓是坑坑洼洼,前前后后,补补贴贴。。。总而言之就是不行,再次看一下源码发掘一下。。。在Spring Boot还没有广泛到家家在用的时候,我们都还在书写繁琐的配置,什么web.xml、spring.xml、bean.xml等等。虽然现在很少,可以说几乎没有企业在去使用Spring的老一套,而会去使用Spring Boot约定大于配置来进行快速开发,但是,Spring的也要去学习,去挖掘,毕竟是我们Java程序员的基础呀。spri原创 2022-01-28 16:35:07 · 3720 阅读 · 0 评论