![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring
我只是文章的搬运工
那个少年~
这个作者很懒,什么都没留下…
展开
-
36.spring系列- 事务失效的原因
事务失效的常见7中情况未启动spring的事务方法不是public类型的数据源未配置事务管理器自身调用问题异常类型错误异常被吞了业务和spring事务代码没在一个线程中1.未开启spring事务@EnableTransactionManagement 注解用来启用spring事务自动管理事务的功能2.方法不是public类型的@Transaction 可以用在类上,接口上,public方法上3.数据源未配置事务管理器spring是通过事务管理器来管理事务的,要注意为每个数据源配转载 2020-12-07 11:15:00 · 353 阅读 · 0 评论 -
35.spring系列- ConfigurationClassPostProcessor Spring的重要后置处理器
疑惑@Configuraction注解的作用是什么,Spring是如何解析加了@Configuraction注解的类Spring在什么时候对@ComponentScan,@ComponentScans注解进行了解析Spring什么时候解析了@Import注解,如何解析的Spring什么时候接卸了@Bean注解?作用ConfigurationClassPostProcessor 是一个BeanFactory的后置处理器,因此它的主要功能是参与BeanFactory的建造。在这个类中,会解析加转载 2020-11-04 16:37:56 · 137 阅读 · 0 评论 -
34.spring系列- @Transaction源码解析
1、@Transaction 事务的用法@Transaction 事务的用法,特别简单,2个步骤在需要让spring管理事务的方法上添加@Transaction注解在spring配置类上添加@EnableTransactionManagement注解。2、@Transaction事务原理内部通过spring aop的功能,通过拦截器拦截@Transaction方法的执行,在方法前后添加事务功能3、@EnableTransactionManagement注解作用...转载 2020-10-27 15:53:27 · 321 阅读 · 0 评论 -
33.spring系列- 事务源码解析
开始本文之前,有些必备知识需要大家先了解一下(下面知识,我之前都有介绍):spring的事务传播行为spring编程式事务目录:回顾一个编程式事务用法:@Test public void test1() throws Exception { //定义一个数据源 DataSource dataSource = new DataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Dr转载 2020-10-23 16:30:41 · 216 阅读 · 0 评论 -
32.spring系列- 事务的传播行为
什么是事务传播行为?事务的传播行为用来描述:系统中的一些方法交由spring来管理事务,当这些方法之间出现嵌套调用的时候,事务所表现出来的行为是什么样的?比如下面2个类,Service1中的m1方法和Service2中的m2方法上面都有@Transaction注解,说明这2个方法由spring来控制事务但是注意m1中2行代码,先执行了一个insert,然后调用service2中的m2方法,service2中的m2方法也执行了一个insert那么大家觉得这2个insert会在一个事务中运行吗?也就是说转载 2020-10-23 11:29:46 · 119 阅读 · 0 评论 -
31.spring系列- 事务(声明式事务)
什么是声明式事务?所谓声明式事务,就是通过配置的方式,比如通过配置文件(xml)或者注解的方式,告诉spring,哪些方法需要spring帮忙管理事务,然后开发者只用关注业务代码,而事务的事情spring自动帮我们控制。比如注解的方式,只需在方法上面加一个@Transaction注解,那么方法执行之前spring会自动开启一个事务,方法执行完毕之后,会自动提交或者回滚事务,而方法内部没有任何事务相关代码,用起来特别的方便。@Transactionpublic void insert(String u转载 2020-10-21 15:29:55 · 322 阅读 · 4 评论 -
30.spring系列- 事务(编程式事务)
本文开始,大概用10篇左右的文章来详解spring中事务的使用,吃透spring事务。本文内容详解spring中编程式事务的使用spirng中使用事务的两种方式编程式事务:硬编码的方式声明式事务:注解@Transaction的方式编程式事务什么是编程式事务通过硬编码的方式使用spring中提供的事务相关的类来控制事务编程式事务主要的两种用法通过PlatformTransactionManager控制事务通过TransactionTemplate控制事务PlatfornTran转载 2020-10-21 13:42:44 · 9582 阅读 · 3 评论 -
29.spring系列- 缓存@Cacheable
@EnableCaching:启动缓存功能开启缓存功能,配置类中需要加上这个注解,有了这个注解之后,spring才知道你需要使用缓存的功能,其他和缓存相关的注解才会有效,spring中主要是通过aop实现的,通过aop来拦截需要使用缓存的方法,实现缓存的功能。@Caheable:赋予缓存功能作用@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调转载 2020-10-21 09:50:53 · 725 阅读 · 0 评论 -
28.spring系列- @Scheduled & @EnableScheduling定时器详解
spring中 @Scheduled & @EnableScheduling 这2个注解,可以用来快速开发定时器,使用特别的简单。如何使用?用法需要定时执行的方法上加上@Scheduled注解,这个注解中可以指定定时执行的规则spring容器中使用@EnableScheduling开启定时任务的执行,此时spring容器中才可以识别@Scheduled标注的方法,然后自动定时执行案例模拟推送消息@Componentpublic class PushJob { //推送方转载 2020-10-19 15:01:04 · 391 阅读 · 0 评论 -
27.spring系列- @EnableAsync & @Async 实现方法异步调用
1.本文内容详解@EnableAsync & @Async,主要分下面几个点进行介绍作用用法获取异步执行结果自定义异常处理线程隔离源码2.作用spring容器中实现bean方法的异步调用。比如有个logService的bean,logservice中有个log方法用来记录日志,当调用logService.log(msg)的时候,希望异步执行,那么可以通过@EnableAsync & @Async来实现。3.用法需要异步执行的方法上面使用@Async注解标注,若b转载 2020-10-19 14:03:41 · 263 阅读 · 1 评论 -
26.spring系列- @EnableAspectJAutoProxy、@Aspect中通知顺序详解
@EnableAspectJAutoProxy自动为bean创建代理对象@EnableAspectJAutoProxy可以自动为spring容器中符合条件的bean创建代理对象,@EnableAspectJAutoProxy需要结合@Aspect注解一起使用。案例来一个配置@ComponentScan@Configuration//开启AspectJ注解@EnableAspectJAutoProxypublic class MainConfig {}来两个方法:@Component转载 2020-10-16 16:48:34 · 1389 阅读 · 0 评论 -
25.spring系列- @Aspect通知详解
@Aspect中有5中通知@Before:前置通知,在方法执行之前执行@Around:环绕通知, 围绕着方法执行@After:后置通知, 在方法执行之后执行@AfterReturning:返回通知, 在方法返回结果之后执行@AfterThrowing:异常通知, 在方法抛出异常之后@Before:前置通知使用public class Service1 { public void m1(){ System.out.println("m1"); }转载 2020-10-16 10:55:21 · 461 阅读 · 0 评论 -
24.spring系列- ProxyFactoryBean创建AOP代理
AOP创建代理的方式主要分为2大类手动方式通过硬编码一个个创建代理自动化方式也称为批量的方式,批量的方式用在spring环境中,通过bean后置处理器来对符合条件的bean创建代理手动的方式基本上是采用硬编码的方式,相对来说更灵活一些,可以脱离spring环境使用,而自动化的方式主要用在spring环境中,和spring集成起来更容易一些,更强大一些。AOP创建代理相关的类左边的ProxyCreatorSupport下面的都是手动的方式,有3个类。右边的AbstractAutoProxyCr转载 2020-10-14 15:21:21 · 390 阅读 · 0 评论 -
23.spring系列- aop原理理解-2
根据配置获取AopProxy这个阶段对应的代码:// 创建AopProxy使用了简单工厂模式AopProxyFactory aopProxyFactory = new DefaultAopProxyFactory();//通过AopProxy工厂获取AopProxy对象AopProxy aopProxy = aopProxyFactory.createAopProxy(advisedSupport);此阶段会根据AdvisedSupport中配置信息,判断具体是采用cglib的方式还是采用jd转载 2020-10-14 14:00:55 · 262 阅读 · 1 评论 -
22.spring系列- aop原理理解-1
本文主要分5部分AOP原理介绍介绍AOP相关的一些类通过源码详解aop代理的创建过程通过源码详解aop代理的调用过程aop代理的一些特性使用案例Spring AOP原理原理比较简单,主要就是使用jdk动态代理和cglib代理来创建代理对象,通过代理对象来访问目标对象,而代理对象中融入了增强的代码,最终起到对目标对象增强的效果。我们在回顾下上节我们说的几个类连接点(JoinPoint)public interface Joinpoint { /** * 转到拦截器链转载 2020-10-13 17:44:34 · 690 阅读 · 0 评论 -
21.spring系列- aop概念详解
什么是AOP?比如银行系统会有这么个流程:有没有发现,这个两者有一个相同的验证流程,上面只是2个操作,如果有更多的操作,验证用户的功能是不是需要写很多次?有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户步骤写进去,即完全不考虑验证用户,你写完之后,在另我一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去,如果你有多个控制流呢,这个写代码的方法转载 2020-10-13 11:13:49 · 383 阅读 · 0 评论 -
20.spring系列- BeanFactory扩展
先来几个问题BeanFactoryPostProcessor是做什么BeanDefinitionRegistryPostProcessor是做什么BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor有什么区别这几个接口的执行顺序是什么样的?Spring容器中主要的4个阶段Bean注册阶段,此阶段会完成所有Bean的注册BeanFactory后置处理阶段注册BeanPostProcessorBean创建阶段,此阶段完成转载 2020-10-12 17:53:47 · 458 阅读 · 0 评论 -
19.spring系列- bean的循环依赖
什么是循环依赖如何检测是否存在循环依赖如何解决循环依赖多例的情况下,循环依赖问题为什么无法解决单例的情况下,虽然可以解决循环依赖,但是还有其他问题吗为什么采用三级缓存解决循环依赖,如果直接将早起bean丢到二级缓存可以吗什么是循环依赖这个很好理解,多个bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A。如何检测是否存在循环依赖?检测循环依赖比较简单,使用一个列表来记录正在创建的bean。bean创建之前,先去记录中看一下自己是否已经在列表中,如果在,说明存.转载 2020-10-12 16:16:26 · 192 阅读 · 0 评论 -
18.spring系列- 事件机制
先看几个问题为什么使用事件?Spring事件的实现有哪些方式?spring事件监听器的处理是同步还是异步?spring事件监听器支持自定义顺序吗?为什么需要使用事件?先来看一个业务场景:产品经理:这两天你帮我实现一个注册的功能我:注册功能比较简单,将用户信息入库就可以了,伪代码如下:public void registerUser(UserModel user){ //插入用户信息到db,完成注册 this.insertUser(user);}过了几天,产品经理:转载 2020-10-12 11:23:05 · 1312 阅读 · 0 评论 -
17.spring系列- @value
问题@value 的用法@value 数据来源@value 动态刷新@Value使用步骤步骤一:使用@PropertySource注解引入配置文件@Component@PropertySource({"classpath:com/javacode2018/lesson002/demo18/db.properties"})public class DbConfig {}步骤二:使用@Value注解引用配置文件的值@Value("${配置文件中的key:默认值}")@Value("转载 2020-10-09 14:17:56 · 187 阅读 · 0 评论 -
16.spring系列- 父子容器
问题什么是父子容器为什么需要父子容器父子容器如何使用案例分别有两个包,一个是model1,一个是model2model1:@Componentpublic class Service1 { public void s1(){ System.out.println("model1 -> s1"); }}@Componentpublic class Service2 { @Autowired Service1 service1;转载 2020-09-30 10:34:06 · 694 阅读 · 0 评论 -
15.spring系列- bean生命周期-3
阶段9:Bean初始化阶段分为5个小阶段:Bean Aware接口回调Bean初始化前操作Bean初始化操作Bean初始化后操作Bean初始化完成操作Bean Aware接口回调private void invokeAwareMethods(final String beanName, final Object bean) { if (bean instanceof Aware) { if (bean instanceof BeanNameAwar转载 2020-09-29 18:31:32 · 150 阅读 · 0 评论 -
14.spring系列- bean生命周期-2
阶段4:BeanDefinition合并阶段合并阶段是做什么的?可能我们定义bean的时候有父子bean关系,此时子BeanDefinition中的信息是不完整的,比如设置属性的时候配置在父BeanDefinition中,此时子BeanDefinition中是没有这些信息的,需要将子bean的BeanDefinition和父bean的BeanDefinition进行合并,得到最终的一个RootBeanDefinition,合并之后得到的RootBeanDefinition包含bean定义的所有信息,包含转载 2020-09-29 16:40:23 · 279 阅读 · 0 评论 -
13.spring系列- bean生命周期-1
** bean 生命周期13个环节**阶段1:bean元信息配置阶段阶段2:bean元信息解析阶段阶段3:将bean注册到容器中阶段4:beanDefinition合并阶段阶段5:bean class加载阶段阶段6:bean 实例化阶段6.1:bean实例化前阶段6.2:bean实例化阶段阶段7:合并后的beanDefinition处理阶段8:属性赋值阶段8.1:bean实例化后阶段8.2:bean属性赋值前阶段8.3:bean属性赋值阶段阶段9:bean初始化阶段9.1:b转载 2020-09-29 14:22:54 · 334 阅读 · 0 评论 -
12.spring系列- @Conditional注解
1.@Conditional是做什么的?2.@Conditional多个条件是什么逻辑关系?3.条件判断在什么时候执行?4.ConfigurationCondition和Condition有什么区别?什么时候使用ConfigurationCondition?5.多个Condition执行的顺序是什么样的?可以配置优先级么?6.介绍一下@Conditional常见的一些用法么?Conditional接口@Target({ElementType.TYPE, ElementType.METHOD})转载 2020-09-28 15:24:45 · 255 阅读 · 0 评论 -
11.spring系列- bean的注册@Import
@Import是做什么的?@Import使用有几种方式?有何区别?DeferredImportSelector是做什么的,他和ImportSelector有什么区别?spring中哪些功能是通过@Import来实现的?spring中是如何解析@Import注解的?转载 2020-09-27 17:15:46 · 361 阅读 · 0 评论 -
10.spring系列- bean的批量注册@ComponentScan
1.@ComponentScan注解是做什么的?2.basePackages的方式和basePackageClasses的方式有什么区别?你建议用哪个?为什么?3.useDefaultFilters有什么用?4.常见的过滤器有哪些类型?5.@ComponentScan是在哪个类中处理的?说一下大概的解析过程?...转载 2020-09-25 16:35:42 · 245 阅读 · 0 评论 -
9.spring系列- @Configuration注解
@Configuration 是什么,加与不加有什么区别?@Configuration 注解用法@Configuration这个注解可以加在类上,让这个类的功能等同于一个bean xml配置文件,如下:@Configurationpublic class ConfigBean {}上面的代码类似于下面的xml:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.o转载 2020-09-24 17:32:35 · 316 阅读 · 0 评论 -
8.spring系列- java注解
问题注解是干什么的?一个注解可以使用多次吗?如何使用?@Inherited是做什么的?@Target中的TYPE_PARAMETER和TYPE_USER用在什么地方?泛型中如何使用注解?注解定义可以实现继承吗?spring对注解有哪些增强?@Aliasfor注解是干什么的?什么是注解代码中注释大家都熟悉吧,注释是给开发者看的,可以提升代码的可读性和可维护性,但是对于java编译器和虚拟机来说是没有意义的,编译之后的字节码文件中是没有注释信息的;而注解和注释有点类似,唯一的区别就是注释是转载 2020-09-24 16:25:35 · 2441 阅读 · 0 评论 -
7.spring系列- 为什么需要代理
1.为什么需要代理我们先看一个案例:有一个接口类:public interface IService { void play(); void sleep(); void eat();}有一个实现类A:public class ServiceA implements IService { @Override public void play() { System.out.println("serviceA -->" + " play"转载 2020-08-21 15:42:46 · 1060 阅读 · 1 评论 -
6.spring系列- 单例bean中的多例bean
先看个案例实体类ServiceA和ServiceBpublic class ServiceA {}public class ServiceB { private ServiceA serviceA; public ServiceA getServiceA() { return serviceA; } public void setServiceA(ServiceA serviceA) { this.serviceA = serv转载 2020-09-22 11:04:56 · 324 阅读 · 0 评论 -
5.spring系列- primary使用
案例public class NormalBean { public interface IService{} public static class ServiceA implements IService{} public static class ServiceB implements IService{}}bean xml配置: <bean id="serviceA" class="com.spring.beanPrimary.No转载 2020-09-21 16:39:09 · 592 阅读 · 0 评论 -
4.spring系列- bean的scope
先看下bean的作用域在xml的使用语法:<bean id="" class="" scope="作用域" /> singleton当scope的值设置为singleton的时候,整个spring容器中只会存在一个bean实例,通过容器多次查找bean的时候(调用BeanFactory的getBean方法或者bean之间注入依赖的bean对象的时候),返回的都是同一个bean对象,singleton是scope的默认值,所以spring容器中默认创建的bean对象是单例的,通常spri转载 2020-09-21 14:14:54 · 213 阅读 · 0 评论 -
3.spring系列- 创建bean实例的方式
spring容器内部创建bean实例对象常见的4中方式通过反射调用构造方式通过静态工厂方法通过实例工厂方法通过FactoryBean方法通过反射调用构造方法创建bean对象调用类的构造方法获取对应的bean实例,是使用最多的方式,这种方式只需要在xml bean元素中指定class属性,spring容器内部会自动调用该类型的构造方法来创建bean对象,将其放在容器中以供使用。语法:<bean id="bean名称" name="bean名称或者别名" class="bean的完整类转载 2020-09-18 17:44:42 · 243 阅读 · 0 评论 -
2.spring系列- xml中bean定义详解
bean概念回顾我们再来回顾一下,被spring管理的对象统称为bean,我们程序中需要用到很多对象,我们将这些对象让spring去帮我们创建和管理,我们可以通过bean xml配置文件告诉spring容器需要管理哪些bean,spring帮我们创建和组装好这些bean对象;那么我们如何从spring中获取想要的bean对象呢,我们需要给bean定义一个名称,spring内部将这些名称和具体的bean对象进行绑定,然后spring容器可以通过这个的名称找对我们需要的对象,这个名称叫做bean的名称,在一个转载 2020-09-18 16:29:40 · 516 阅读 · 0 评论 -
1.spring系列- spring 初使用
Spring容器对象BeanFactoryBeanFactory接口:spring容器中具有代表性的容器就是BeanFactory接口,这个是spring容器的顶层接口,提供了容器最基本的功能。里面常用的一些方法://按bean的id或者别名查找容器中的beanObject getBean(String name) throws BeansException//这个是一个泛型方法,按照bean的id或者别名查找指定类型的bean,返回指定类型的bean对象<T> T getBea转载 2020-09-18 15:32:30 · 94 阅读 · 0 评论