![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
王佑辉
个人笔记,多谢指正,不喜勿喷
展开
-
【spring】@Autowired bean后置处理器
【代码】【spring】AutowiredAnnotationBeanPostProcessor。原创 2024-01-03 10:15:32 · 385 阅读 · 0 评论 -
【spring】bean的后处理器
1. 解析@Resource @PostConstruct @PreDestroy。2.实例化前、实例化后、依赖注入阶段、初始化前、初始化后、销毁之前提供扩展。1. springboot中配置文件属性绑定bean的增强。1. 用来解析@Autowired @Value注解。1.为bean生命周期的各个阶段提供扩展。2. 需要引用springboot的包。原创 2023-11-30 10:14:23 · 485 阅读 · 0 评论 -
【spring】ApplicationContext的实现
System.out.println("读取前的BeanDefinitionName====");System.out.println("读取后的BeanDefinitionName====");原创 2023-11-17 10:25:27 · 80 阅读 · 0 评论 -
【spring】BeanFactory的实现
3. CommonAnnotationBeanPostProcessor的order属性为Ordered.LOWEST_PRECEDENCE - 3,即:2^31 - 1 - 3 = 2147483644。2. AutowiredAnnotationBeanPostProcessor的order为 2^31-1-2即:2147483647-2 = 2147483645。1.不会主动调用BeanFactory后处理器。4.不会解析${}占位符和#{}表达式。2.不会主动添加Bean后处理器。原创 2023-11-14 11:24:48 · 133 阅读 · 0 评论 -
【spring】spring依赖注入的方式
2.控制了对象的外部可见性,不被spring容器托管的对象无法自动注入。3.每个set方法单独注入一个对象,可以灵活控制,可以实现选择性注入。2.注入对象很多的情况下,构造器参数列表会很长,不灵活。1.如@Autowired、@Resource注解。3.对象初始化完成后,即可获得可使用的对象。2.可以确保注入前不依赖spring容器。4.被final修饰的属性,无法赋值。3.不能被检测出是否出现循环依赖。2.通过Setter方法注入。3.通过Field属性注入。1.日常开发中不常见。原创 2023-04-21 22:08:41 · 599 阅读 · 0 评论 -
【spring】BeanFactory和FactoryBean的区别
1.BeanFactory是所有Spring Bean容器的顶级接口,为spring容器定义了一套规范,并提供getBean方法从容器中获取指定的Bean实例。3.FactoryBean是一个工厂Bean,是一个接口,实现该接口可以动态生成某一类型的Bean的实例,可以自定义一个Bean并且可以加载到IOC容器里面。4.FactoryBean中有个方法getObject,这个方法可以动态构建Bean的一个过程。2.BeanFactory在产生Bean的同时,还提供了解决Bean之间的依赖注入的能力。原创 2023-04-04 21:50:45 · 245 阅读 · 0 评论 -
【spring】@Transactional注解属性说明
1.该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚,与rollbackForClassName相反。1.该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚,与rollbackFor相反。1.该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。1. 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。2.事务隔离级别介绍。原创 2023-03-27 22:45:21 · 844 阅读 · 1 评论 -
【springboot】springboot自动配置原理
5.自动配置导入选择器AutoConfigurationImportSelector实现了延时导入选择器DeferredImportSelector接口,实现此接口的自动配置类的顺序在最后创建bean,方便做bean扩展和覆盖。3.注解@EnableAutoConfiguration中有注解@Import({AutoConfigurationImportSelector.class})2.注解@SpringBootApplication里面有注解@EnableAutoConfiguration。原创 2023-03-23 22:18:15 · 39 阅读 · 0 评论 -
【spring】springmvc(DispatcherServlet)的工作流程
1.用户发送请求到前置控制器DispatcherServlet (doDispatch(HttpServletRequest request, HttpServletResponse response))2.前置控制器DispatcherServlet收到请求后,调用处理器映射器HandlerMapping,请求获取处理器Handler (mappedHandler = getHandler(processedRequest);原创 2023-03-22 21:57:19 · 361 阅读 · 0 评论 -
【spring】spring事务的隔离级别
1.脏读2.不可重复读3. 幻读4.是并发事务产生的问题。原创 2023-03-21 21:28:18 · 982 阅读 · 1 评论 -
【springboot】根据配置切换不同实现类
2.用@Resource注解的特性,根据名字查找对应的bean。1.一个接口两个实现类。原创 2023-03-20 12:06:39 · 875 阅读 · 0 评论 -
【spring】spring事务的传播行为
Transactional(propagation=Propagation.REQUIRES_NEW)适用内部事务和外部事务不存在业务关联的情况,例如日志。@Transactional(propagation=Propagation.MANDATORY)不常用。@Transactional(propagation=Propagation.NEVER)不常用。1.事务的传播特性是当一个事务方法被另一个事务方法调用时,这个事务方法该如何进行。required(默认)不用外部事务,开启新事务。原创 2023-03-19 22:57:13 · 122 阅读 · 0 评论 -
【spring】spring的aop是在哪里创建的动态代理
2.循环依赖的Bean在bean属性注入时存在的循环依赖的情况下,会为循环依赖的Bean通过MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition创建aop。1.正常的Bean会在bean的生命周期的初始化后,通过BeanPostProcessor.postProcessAfterInitailization创建aop的动态代理。原创 2023-03-19 22:01:07 · 122 阅读 · 0 评论 -
【spring】jdk动态代理和cglib动态代理的区别
6.性能上:在老版的jdk,jdk代理生成的类速度快,通过反射调用慢,cglib是jdk代理速度的10倍左右,jdk在版本每次升级都会有很大的性能提升,cglib停滞不前,jdk7 8的动态代理性能在1万次实验中比cglib要快20%左右。5.jdk动态代理如果目标类未实现接口则无法代理,cglib是通过继承的方式来动态代理,若目标类被final关键字修饰,则无法使用cglib做动态代理。1.jdk动态代理只提供实现接口的目标类代理,不支持没有实现接口的目标类的代理。3.从限制角度讨论区别。原创 2023-03-19 20:07:58 · 3529 阅读 · 2 评论 -
【spring】spring通知有哪些类型
7.spring5.2.7之前的执行顺序:前置->方法->后置->返回,前置->方法->后置->异常,spring5.2.7之后的执行顺序:前置->方法->返回->后置,前置->方法->异常->后置。6.环绕通知(around):通知包裹被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。3. 后置通知(after):在目标方法完成之后调用通知,不关心方法的输出是什么。2.前置通知(before):在目标方法被调用之前调用通知功能。1.spring切面有5种类型的通知。原创 2023-03-19 16:39:39 · 284 阅读 · 0 评论 -
【spring】aop的名词
3. 通知(advice):需要增加到业务方法中的公共代码,通知有很多类型分别可以在需要增加的业务方法不同位置进行执行(前置通知、后置通知、异常通知、返回通知、环绕通知)4.切点(pointcut):决定哪些方法需要增强、哪些不需要增强,结合切点表达式进行实现。6.织入(weaving):aop用的织入方式是动态代理,为目标对象创建动态代理的过程。5.目标对象(target object):增强的对象。2.连接点(join point):被增强的业务方法。1.切面(aspect):切面类,管理切点和通知。原创 2023-03-19 16:13:22 · 72 阅读 · 0 评论 -
【spring】aop是什么
2.用于将与业务无关,对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,该模块被命名为切面Aspect。1.全称是Aspect Oriented Programming,称为切面编程。3. 减少系统中的重复代码,降低了模块间的耦合度,提高了系统的可维护性。4.可用于权限认证、日志记录、事务处理等。原创 2023-03-19 15:53:22 · 33 阅读 · 0 评论 -
【spring】将一个第三方的类配成为Bean有哪些方式
4.beanDefinition注册后置处理器(BeanDefinitionRegistryPostProcessor),不需要@Import引入,但顺序在后面。3. @Import导入ImportBeanDefinitionRegistrar实现类,可以给BeanDefinition设置属性等信息。1.第三方的bean不能改写源码,在类上加@Component注解。2.@Import导入类,实例化过程不能干预。1.@Bean方式,实例化过程可以更改。原创 2023-03-19 15:21:23 · 631 阅读 · 0 评论 -
【spring】@Autowired和@Resource的区别
2.@Autowired是spring提供的注解,@Resource是jdk提供的注解。4.@Resource会按名称来进行匹配,如果匹配到多个会按照类型来匹配。3.@Autowired会按类型进行匹配,如果匹配到多个按照名称来匹配。1.都可以设置一个属性进行自动注入。原创 2023-03-18 21:41:24 · 39 阅读 · 0 评论 -
【spring】如何让自动注入找到多个依赖Bean时不报错
1.加@Primary注解。原创 2023-03-18 20:48:17 · 119 阅读 · 0 评论 -
【spring】如何让自动注入没有找到依赖Bean时不报错
1.@Autowired(required = false)原创 2023-03-18 18:39:19 · 476 阅读 · 0 评论 -
【spring】@import的用法
5.通过实现了DeferredImportSelector(ImportSelector的子类)可以一次性注册多个,返回一个string[]每一个值是完整类路径,与ImpoertSelector的区别:顺序靠后,SpringBoot用的一种方式。3. 指定实现了ImportSelector接口的类,通过ImportSelector可以一次性注册多个,返回一个string[]数组中,数组中每一个值是类的完整路径。原创 2023-03-18 18:37:20 · 114 阅读 · 0 评论 -
【spring】@Component、@Controller、@Service和@Repository有什么区别
2.@Controller、@Service、@Repository的源注解就是@Controller。5.@Repository用于数据访问层。3. @Controller用于控制层。4.@Service用于业务逻辑层。1.四个注解的作用是一样的。原创 2023-03-18 16:48:49 · 74 阅读 · 0 评论 -
【spring】javaConfig是如何替代spring.xml的
3.bean配置: <bean class=“com.learning.UserService” scope=“singleton” lazy-init=“false”></bean>6.注入基本属性:<property name=“password” value=“${mysql.password}”></property>3. bean配置:@Bean、@Scope(“singleton”)、@Lazy(false)6.注入基本属性:@Value(“${mysql.password}”)原创 2023-03-18 14:30:16 · 402 阅读 · 0 评论 -
【spring】spring有哪几种配置方式
1.文件名为spring-annotation.xml,文件位置放入resources中。1.这里是@Configuration注解,@Bean @Import等暂不介绍。3. 基于java的配置,javaConfig,spring3.0+开始。1.文件名为spring.xml,文件位置放入resources中。1.基于xml配置文件,spring诞生的一种配置方式。1.spring有三种重要的方法提供配置元数据。2.基于注解的配置,spring2.5+开始。原创 2023-03-18 13:35:28 · 686 阅读 · 0 评论 -
【spring】如何在所有BeanDefinition注册完后做扩展
1.通过实现bean工厂的后置处理器(BeanFactoryPostProcessor)来扩展。原创 2023-03-17 23:43:41 · 128 阅读 · 0 评论 -
【spring】spring如何在所有Bean创建完后做扩展
1.扩展方式一:基于SmartInitializingSingleton接口,在finishBeanFactoryInitialization(beanFactory);1.所有bean创建完:new ApplicationContext()->refresh()->finishBeanFactoryInitialization(循环所有的BeanDefinition,通过BeanFactory.getBean()生成所有的Bean),循环结束后所有的Bean创建完。原创 2023-03-17 23:22:33 · 311 阅读 · 0 评论 -
【spring】spring如何解决bean的循环依赖
4. 三级缓存:缓存的是函数接口,通过lambda表达式把方法传进去(把bean的实例和bean的名字传进去)(可能会有aop创建),但不会立即调用(如果在实例化后立即调用,所有aop不管bean是否循环依赖都会在实例化后创建proxy,但spring希望正常bean遵循生命周期,在初始化创建动态代理),第二次getBean的时候才会去调用三级缓存(实现了aop才会创建动态代理,没有实现则返回bean的实例),放入二级缓存(避免被多个依赖而重复创建),并从三级缓存中删除。1.构造函数的循环依赖没有解决。原创 2023-03-16 22:34:35 · 735 阅读 · 0 评论 -
【spring】bean的生命周期
6.如果bean实现了ApplicationContextAware接口,spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入。5.如果bean实现了BeanFactoryAware接口,spirng将调用setBeanFactory()方法,将BeanFactory容器实例传入。4.如果bean实现了BeanNameAware接口,spring将bean的ID传递给setBean-Name()方法。2.spring对bean进行实例化。原创 2023-03-16 21:53:24 · 322 阅读 · 0 评论 -
【spring】Bean生命周期的回调方法
2.实现InitiallizingBean接口。1.注解方式:@PostConstruct。2.实现DisposableBean接口。1.注解方式:@PreDestroy。注解方式>接口实现>@Bean。原创 2023-03-15 21:57:33 · 132 阅读 · 0 评论 -
【spring】自动装配(注入)的方式
1.在spring中,对象无需查找或创建与其关联的其他对象,由容器负责把依赖的对象引用赋予各个对象,使用autowired来配置自动装配的模式。2. byName:通过bean的名称进行自动装配,如果一个bean的property与另一个bean的name相同,就进行自动装配。5.autodetect:自动探测,如果有构造方法,通过constructor的方式自动装配,否则使用byType的方式自动装配。1.no:默认的方式是不进行自动装配,通过手工设置ref属性来进行装配bean。原创 2023-03-15 15:19:26 · 266 阅读 · 0 评论 -
【spring】自动装配需要注意什么
3. 基本数据类型不能自动装配简单的属性,有的话使用显示装配(手动注入基本数据类型是可以的<property value=" ">)2.可以用<constructor-arg>和<property>配置来定义依赖,可以覆盖自动注入。4.推荐使用手动装配@Autowired(根据类型,找到多个再根据名字) ref。1.一定要有set方法。原创 2023-03-15 15:01:48 · 68 阅读 · 0 评论 -
【spring】bean的装配
区别是@Autowired默认Bean的类型装配,@Resource默认按照Bean的实例名称进行装配。@Resource有name和type两个属性,name会解析为Bean的实例名称,type会解析为Bean的实例类型。5.@Autowired:用于对Bean的属性变量、属性的setter方法以及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。1.spring的 元素中包含一个 autowire 属性,通过设置 autowire 的属性值来自动装配Bean。原创 2023-03-14 22:25:24 · 369 阅读 · 0 评论 -
【面试】spring实例化bean的方式
spring实例化bean的方式原创 2023-03-13 23:12:03 · 57 阅读 · 0 评论 -
【面试】spring中ioc加载过程
spring中IOC加载过程原创 2023-03-12 22:12:20 · 332 阅读 · 0 评论 -
【spring】spring循环依赖-三级缓存
spring循环依赖-三级缓存原创 2023-03-11 22:31:03 · 41 阅读 · 0 评论 -
【面试】spring如何处理线程并发问题
spring如何处理线程并发问题原创 2023-03-08 22:41:59 · 251 阅读 · 0 评论 -
【面试】spring的bean是线程安全的吗?
spring的bean是线程安全的吗原创 2023-03-08 22:24:25 · 32 阅读 · 0 评论 -
【面试】spring单例bean的优势
spring单例bean的优势原创 2023-03-06 22:32:46 · 118 阅读 · 0 评论 -
【spring】spring循环依赖-二级缓存
spring循环依赖-二级缓存原创 2023-03-05 21:20:58 · 812 阅读 · 0 评论