![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
文章平均质量分 61
lisin-lee-cooper
这个作者很懒,什么都没留下…
展开
-
Spring 解决循环依赖
一. Bean的生命周期 二. 什么是什么是三级缓存 /** 1级缓存 Cache of singleton objects: bean name to bean instance. */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); /** 2级缓存 Cache of early singleton objects: bean name to bean i原创 2022-03-27 23:43:39 · 635 阅读 · 0 评论 -
Spring 面试知识点
一. IOC 部分 1.1 IOC思想 将获取对象的方式交给了Spring容器,这种将控制权交给别人的思想称作控制反转,根据beanName去获取和创建对象的过程称作依赖查找 1.2 依赖查找和依赖注入的区别 依赖注入的作用目标通常是类成员,依赖查找的作用目标可以是方法体内也可以是方法体外; 依赖注入通常借助一个上下文被动的接受,依赖查找同产主动使用上下文搜索。 1.3 BeanFactory和ApplicationContext 的对比 BeanFactory 接口提供了一个抽象的配置和对象的管理机制 A原创 2022-03-24 14:56:47 · 860 阅读 · 0 评论 -
SpringAop简述
作用:Spring 的两大特性之一, 主要提供面向切面的编程思想,区分于面向对象编程。 原理(动态代理+反射):spring通过反射的形式,为目标类动态生成代理类,将切面植入到代理对象中。这样代理类可以在目标方法执行之前、之后,处理一些额外的通知事件。 aop目标 aop的最终目的是实现代码的完全解耦。实现完全模块化,使得大型项目开发与管理,更加容易 代理 静态代理:目标接口,目标类,代理类。对于大型复杂的项目,编写太多的目标代理类是个非常庞大的工程。 动态代理: jdk动态代理:动态生成的代理类,和目标原创 2022-03-09 23:19:23 · 209 阅读 · 0 评论 -
ratelimiter-starter 限流框架简化版
一.原理 1.基于互联网背景,客户增长数剧增,服务稳定性受到严峻的挑战,机器CPU和内存秒秒钟打满,导致服务器宕机。 2.为了实现服务高可用,CTO下达的指令一般都是说服务器需要达到99.99%可用,其实都是吹皮的,但是我们朝着这个目标矢志不渝地奋斗终生,从而实现自己的人生价值,进而实现中华民族的伟大复兴 3.限流可用从不同的角度出发,市面上也有比较有名的阿里的Sentinel,感兴趣的同学可用去深究,本篇文章主要是从Java拦截器的限制用户多次请求的角度来限制用户的访问量,大家也可以基于此框架来定制适用于原创 2021-05-28 15:52:22 · 250 阅读 · 1 评论 -
SpringIOC的循环依赖解析
一.示例代码及解析 循环依赖分为自身依赖于自身、互相循环依赖、多组循环依赖,代码如下所示 @Getter @Setter public class ClazzA { @Autowired private ClazzB b; @Autowired private ClazzA a; } @Setter @Getter public class ClazzB { @Autowired private ClazzA a; } public class原创 2021-05-08 16:43:40 · 68 阅读 · 0 评论 -
Spring @Conditional 注解详解
一.注解的定义:根据条件注入Bean // 可作用于类和方法上 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional { Class<? extends Condition>[] value(); } @FunctionalInterface public interface Conditi原创 2021-04-27 17:33:10 · 145 阅读 · 0 评论 -
SpringBoot starter插件的开发
一.需求背景 为了是业务代码和功能的解耦,或者说减少代码的侵入性,像日志和登录拦截,往往都是在每个微服务中都编写相同的代码,为了使开发迅速和减少代码的编写往往都可以抽成一个starter,需要使用此功能的微服务依赖此jar包即可,无需编写相同的代码 此案列拦截非白名单用户的demo 二.demo 代码 新建springboot项目。作为一个插件被其他服务依赖,其实功能就是一个切面的功能方法抽取 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.原创 2021-04-21 16:54:24 · 322 阅读 · 0 评论 -
Spring Bean的创建过程
一.Bean创建核心流程图 二.Bean 创建的源码分析 @Override public <T> T getBean(String name, Class<T> requiredType) throws BeansException { return doGetBean(name, requiredType, null, false); } protected <T> T doGetBean( String name, @Nullable Class&原创 2021-04-20 10:49:35 · 131 阅读 · 0 评论 -
SpringIOC源码分析
一.源码地址下载 SpringFramework源码git仓库地址 下载源码后用idea打开 自动下载gradle 构建项目 二.demo示例代码和源码解析 项目构建完成后在spring-context 的模块下编写代码 public interface HelloService { String hello(); } public class HelloServiceImpl implements HelloService{ @Override public String hello() {原创 2021-04-15 19:25:55 · 103 阅读 · 0 评论 -
SpringMVC源码解析(5.2.3版本)
一.将请求和url与Controller绑定 1.在spring容器启动时,在实例化Controller bean后,调用afterPropertiesSet() ->initHandlerMethods()-> processCandidateBean() ->detectHandlerMethods 解析bean的方法 protected void detectHandlerMethods(Object handler) { Class<?> handler原创 2021-04-14 20:01:30 · 197 阅读 · 0 评论 -
SpringMVC执行流程
1.时序图 2.执行流程 1、前端请求到前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用处理映射器HandlerMapping 3、处理映射器根据请求url找到具体的处理器(ApplicationContext初始化时用Map保存所有的url和controller对应关系),生成处理器执行链HandlerExecutionChain(包含处理器对象和处理器拦截器)返回给DispatcherServlet 4、DispatcherServlet根据处理器Han原创 2021-04-14 16:11:17 · 102 阅读 · 0 评论 -
SpringMVC搭建项目入门教程
1.新建项目 选中Spring ->Spring MVC 模块 点击next 和 Finish 注意:将生产的lib文件移动到WEB-INF目录下 2.配置 web.xml和SpringMVCxml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSche原创 2021-04-14 15:26:40 · 109 阅读 · 0 评论 -
SpringIOC特性
一alias(别名) 1.xml方式配置 public class TestService { public TestService() { System.out.println("TestService初始化成功"); } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi原创 2021-04-08 20:49:46 · 135 阅读 · 0 评论 -
Bean如何注册到Spring容器中
一.Spring如何管理bean 1.@Resource 默认根据name匹配,未找到再根据type匹配; 2.@Autowired 根据类型匹配; 3.无实现类,根据接口生成代理类,把代理类放到FactoryBean的实现中,最后把FactoryBean的实现类注册到Spring容器中,本篇具体讲第三种方式。 二.核心步骤方法 public interface ITestDao { String test(); } public class ProxyBeanFactory im原创 2021-04-05 17:48:37 · 286 阅读 · 0 评论