spring
文章平均质量分 82
阿立聊代码
浙江大学,10年上市公司Java高级讲师,基础扎实;Java办公文章优质创作者;CSDN认证博客专家;Java编程领域有着丰富的经验和技能,熟练掌握前后端技术,全栈。
展开
-
SpringMVC重点功能底层源码解析
SpringMVC在进行把String转成User对象时,会先判断有没有User类型对应的StringToUserEditor,如果有就会利用它来把String转成User对象,如果没有则会找User类中有没有String类型参数的构造方法,如果有则用该构造方法来构造出User对象。原创 2024-09-06 11:21:24 · 1661 阅读 · 0 评论 -
SpringMVC启动与请求处理流程解析
实现了Controller接口的Bean对象实现了HttpRequestHandler接口的Bean对象添加了@RequestMapping注解的方法一个HandlerFunction对象@Override@Override@Component@Autowired@Bean.build();HandlerMapping负责去寻找Handler,并且保存路径和Handler之间的映射关系。原创 2024-09-06 11:04:13 · 1468 阅读 · 0 评论 -
Docker SpringBoot3.0 实战
我们可以直接把SpringBoot应用对应的本地可执行文件构建为一个Docker镜像,这样就能跨操作系统运行了。原创 2024-09-05 16:48:36 · 981 阅读 · 0 评论 -
SpringBoot 3.0实战
中,进入到工程目录下,执行mvn -Pnative native:compile进行编译就可以了,就能在target下生成对应的exe文件,后续只要运行exe文件就能启动应用了。这本身就是一个普通的SpringBoot工程,所以可以使用我们之前的方式使用,同时也支持利用native-image命令把整个SpringBoot工程编译成为一个exe文件。这样,我们就能够直接运行这个exe来启动我们的SpringBoot项目了。在执行命令之前,请确保环境变量中设置的时graalvm的路径。原创 2024-09-05 16:35:55 · 418 阅读 · 0 评论 -
Spring 6.0
要使用GraalVM,不能使用普通的windows自带的命令行窗口,得使用VS提供的 x64 Native Tools Command Prompt for VS 2019,如果没有可以执行C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat脚本来安装。选择C++桌面开发,和Windows 11 SDK,然后进行下载和安装,安装后重启操作系统。原创 2024-09-04 16:34:06 · 649 阅读 · 0 评论 -
Spring之事务底层源码解析
所以这个类的主要作用就是。原创 2024-09-04 16:31:06 · 1468 阅读 · 0 评论 -
Spring之AOP底层源码解析(下)
DefaultAdvisorAutoProxyCreator的父类是AbstractAdvisorAutoProxyCreator。非常强大以及重要,只要Spring容器中存在这个类型的Bean,就相当于开启了AOP,AbstractAdvisorAutoProxyCreator实际上就是一个BeanPostProcessor,所以在创建某个Bean时,就会进入到它对应的生命周期方法中,比如:在某个Bean初始化之后。原创 2024-09-03 11:46:24 · 1160 阅读 · 0 评论 -
Spring之AOP底层源码解析(上)
代理模式的解释:为提供一种以控制对这个对象的访问,增强一个类中的某个方法,对程序进行扩展。此时,我们new一个UserService对象,然后执行test()方法,结果是显而易见的。如果我们现在想在得到的都是UserService对象,但是执行test()方法时的效果却不一样了,这就是代理所带来的效果。上面是通过cglib来实现的代理对象的创建,是基于的,被代理类(UserService)是父类,代理类是子类,代理对象就是代理类的实例对象,代理类是由cglib创建的,对于程序员来说不用关心。原创 2024-09-03 11:44:55 · 1165 阅读 · 0 评论 -
Spring之配置类解析源码解析
解析AppConfig类,生成对应的ConfigurationClass再扫描,扫描到的类都会生成对应的BeanDefinition,并且同时这些类也是ConfigurationClass再解析ConfigurationClass的其他信息,比如@ImportResource注解的处理,@Import注解的处理,@Bean注解的处理。原创 2024-09-01 12:08:56 · 738 阅读 · 0 评论 -
Spring之启动过程源码解析
通常,我们说的Spring启动,就是构造ApplicationContext对象以及调用refresh()方法的过程。首先,Spring启动过程主要做了这么几件事情:构造一个BeanFactory对象解析配置类,得到BeanDefinition,并注册到BeanFactory中解析@ComponentScan,此时就会完成扫描解析@Import解析@Bean...因为ApplicationContext还支持国际化,所以还需要初始化MessageSource对象。原创 2024-09-01 12:02:48 · 842 阅读 · 0 评论 -
Spring之推断构造方法源码解析
Spring中的一个bean,需要实例化得到一个对象,而实例化就需要用到构造方法。一般情况下,一个类只有一个构造方法:要么是无参的构造方法要么是有参的构造方法如果只有的构造方法,那么实例化就只能使用这个构造方法了。如果只有的构造方法,那么实例化时能使用这个构造方法吗?要分情况讨论:使用AnnotationConfigApplicationContext,会使用这个构造方法进行实例化,那么Spring会根据构造方法的参数信息去寻找bean,然后传给构造方法。原创 2024-08-31 11:11:17 · 1045 阅读 · 0 评论 -
Spring之循环依赖底层源码解析
缓存经过了完整生命周期的bean:缓存未经过完整生命周期的bean,如果某个bean出现了循环依赖,就会提前。原创 2024-08-31 11:04:36 · 965 阅读 · 0 评论 -
Spring之依赖注入源码解析(下)
上节课我们讲了Spring中的自动注入(byName,byType)和@Autowired注解的工作原理以及源码分析,那么今天这节课,我们来分析还没讲完的,剩下的核心的方法:该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。下面来分析一下中**resolveDependency()**方法的具体实现。原创 2024-08-30 11:16:16 · 1190 阅读 · 0 评论 -
Spring之依赖注入源码解析(上)
方法参数个数为0个,并且 (方法名字以"get"开头 或者 方法名字以"is"开头并且方法的返回类型为boolean)**set方法的定义是:**方法参数个数为1个,并且 (方法名字以"set"开头并且方法返回类型为void)所以,Spring在通过byName的自动填充属性时流程是:找到所有set方法所对应的XXX部分的名字根据XXX部分的名字去获取beanSpring在通过byType的自动填充属性时流程是:获取到set方法中的唯一参数的参数类型,并且根据该类型去容器中获取bean。原创 2024-08-30 11:10:42 · 1168 阅读 · 0 评论 -
Spring之Bean生命周期源码解析(下)
但是我们在定义一个Bean时,如果这个Bean实现了DisposableBean接口,或者实现了AutoCloseable接口,或者在BeanDefinition中指定了destroyMethodName,那么这个Bean都属于“DisposableBean”,这些Bean在容器关闭时都要调用相应的销毁方法。会把实现了AutoCloseable接口的类封装成DisposableBeanAdapter,而DisposableBeanAdapter实现了DisposableBean接口。原创 2024-08-29 11:19:29 · 1085 阅读 · 0 评论 -
Spring之Bean生命周期源码解析上
实例化自动注入Aware对象初始化。原创 2024-08-28 15:14:11 · 936 阅读 · 0 评论 -
Spring之底层架构核心概念解析
我们还可以。原创 2024-08-27 09:47:36 · 1209 阅读 · 0 评论 -
Spring事务
当我们在某个方法上加了@Transactional注解后,就表示该方法在调用时会开启Spring事务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。如果存在,则利用事务管理器(TransactionMananger)新建一个数据库连接。执行target.test(),执行程序员所写的业务逻辑代码,也就是执行sql。判断当前执行的方法是否存在@Transactional注解。修改数据库连接的autocommit为false。执行完了之后如果没有出现异常,则提交,否则回滚。原创 2024-08-27 09:42:16 · 301 阅读 · 0 评论 -
AOP大致流程
代理类中还会有一个target属性,该属性的值为被代理对象(也就是通过UserService类推断构造方法实例化出来的对象,进行了依赖注入、初始化等步骤的对象)UserService代理对象.test()--->执行切面逻辑--->target.test(),注意target对象不是代理对象,而是被代理对象。当我们从Spring容器得到UserService的Bean对象时,拿到的就是UserServiceProxy所生成的对象,也就是代理对象。执行切面逻辑(@Before)找出所有的切面Bean。原创 2024-08-26 10:45:52 · 239 阅读 · 0 评论 -
Spring推断构造方法
需要重视的是,如果Spring选择了一个有参的构造方法,Spring在调用这个有参构造方法时,需要传入参数,那这个参数是怎么来的呢?如果一个类存在多个构造方法,Spring不知道如何选择,就会看是否有无参的构造方法,因为无参构造方法本身表示了一种默认的意义。如果一个类只存在一个构造方法,不管该构造方法是无参构造方法,还是有参构造方法,Spring都会用这个构造方法。这些构造方法中,存在一个无参的构造方法,那么Spring就会用这个无参的构造方法。确定用哪个构造方法,确定入参的Bean对象,这个过程就叫做。原创 2024-08-26 10:41:41 · 408 阅读 · 0 评论 -
Spring中Bean的创建过程
紧接着,Spring会判断该对象是否实现了InitializingBean接口,如果实现了,就表示当前对象必须实现该接口中的afterPropertiesSet()方法,那Spring就会调用当前对象中的afterPropertiesSet()方法(最后,Spring会判断当前对象需不需要进行AOP,如果不需要那么Bean就创建完了,如果需要进行AOP,则会进行动态代理并生成一个代理对象做为Bean(那么Spring到底是如何来创建一个Bean的呢,这个就是Bean创建的生命周期,大致过程如下。原创 2024-08-25 22:41:58 · 358 阅读 · 0 评论 -
Spring中是如何创建一个对象
其实不管是AnnotationConfigApplicationContext还是ClassPathXmlApplicationContext,目前,我们都可以简单的将它们理解为就是用来创建Java对象的,比如调用getBean()就会去创建对象(此处不严谨,getBean可能也不会去创建对象,后续课程详解)。这样,但调用context.getBean("userService")时,就可以根据"userService"找到UserService类,从而就可以去创建对象了。原创 2024-08-25 22:40:23 · 292 阅读 · 0 评论 -
SpringMVC脑图,持续更新中。。。
<iframe id="embed_dom" name="embed_dom" frameborder="0" style="display:block;width:525px; height:245px;" src="https://www.processon.com/embed/5e9bdec1e0b34d6feab8c1f5"></iframe>原创 2020-04-22 22:12:48 · 125 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
quartz整合spring的定时任务案例不许要整合spring的可以参考quartz-2.2.3的相关资源,自行百度搜索。 需要的包:spring-context-support-4.1.7.RELEASE.jar 以下是applicationContext.xml的配置 <!-- 使用MethodInvokingJobDetailFactoryBean,任务类可以不实现Job接口,通过原创 2017-11-06 15:55:55 · 167 阅读 · 0 评论