3-Spring BeanDefinition加载
1. 目录[TOC] 2. 说明3. 源码解析3.1. AbstractRefreshableApplicationContext#loadBeanDefinitionsAbstractRefreshableApplicationContext 不提供加载beanDefinition的具体逻辑,交由子类实现,xml加载的方式的子类为XmlWebApplicationContext, loadBeanDefinitions 加载Bean定义,此类在AbstractRefreshableApplicationContext为抽象方法,因此需要找到实现类方法XmlWebApplicationContext#loadBeanDefinitions() 实现类加载Bean定义 3.2. 加载入口方法1234567891011121314protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws BeansException, IOException { // 创建...
2-Spring ApplicationContext刷新流程
1. 目录[TOC] 2. 说明3. 依赖分析4. 源码解析4.1. AbstractApplicationContext#refresh()AbstractApplicationContext#refresh() 是spring容器重要的方法,此方法初始化了spring的上下文,加载了spring的容器。再其他地方需要重新刷新的时候也重建上下文。 上下文刷新,XmlWebApplicationContext继承至AbstractApplicationContext,直接调用的父类方法refresh()刷新方法真正初始化容器全流程 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public void refresh() throws BeansException, IllegalStateException { //加锁 synchronized...
3 Mysql用户管理
用户管理快捷创建一个全权限的用户123456-- 创建并开启远程create user 'kewen'@'%' identified by 'kw123456';-- 授权全部权限grant all on *.* to 'kewen'@'%';-- 刷新flush privileges; 执行完以上就完成了用户创建,不会再报密码的问题了,如果连接不上,检查服务器的防火墙或云服务器的安全策略 创建用户1234-- 格式 create user 用户名@IP地址 identified by 密码;-- @IP地址 可以省略,默认为 % 即所有create user 'kewen_ch'@'%' identified by 'ch123456';create user kewen_ch identified by 'ch123456'; 查询用户12345-- 查询所有用户select...
1-Spring xml启动
1. 目录[TOC] 2. 说明梳理源码就从最原始的方式开始,使用xml加入tomcat是最直接引用spring的方式。之所以不用springboot,虽然它搭建简单,但springboot脚手架为我们做了很多事,引入spring的地方不直观,不利于分析源码。 首先配置web工程,web工程大家都知道是通过tomcat启动的,在web.xml配置参数,调用spring对应的类,这样spring就启动了 3. 依赖关系4. 源码解析4.1. tomcat的启动tomcat的启动流程咱就不分析了,这里主要从Tomcat提供的钩子函数开始。主要配置在web.xml中主要配置有: filter: 配置过滤器 listener:配置监听器,这也是spring启动最主要的钩子函数,必须继承javax.servlet.ServletContextListener servlet:...
2 Mysql配置
1. 登陆12345mysql -hlocalhost -u root -p# 如果出现:-bash: mysql: command not found--就执行: # ln -s /usr/local/mysql/bin/mysql /usr/bin --没有出现就不用执行 2. 服务起停1234567891011# 查看mysql状态 service mysql statusservice mysql startservice mysql stopservice mysql restart# service mariadb status# service mariadb start# service mariadb stop# service mariadb restart 3. 修改默认配置官方引用 3.1. 修改字符集查看字符集: 1show variables like '%character%'; +————————–+—————————-+| Variable_name | Value ...
2 MariaDB配置
createTime:20241008MariaDB配置主要配置在server.conf中 123456789[server][mysqld]port=13306character_set_server=utf8mb4collation-server = utf8mb4_unicode_cidefault-storage-engine=INNODBlower_case_table_names=1 #大小写不敏感 在client.conf中 12[mysql]default-character-set=utf8mb4 client.confserver.conf1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859[mysqld] ...
Spring Aop切面
1. AOP 切面1.1. 切面的定义Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架提供的一种对OOP(Object-Oriented Programming,面向对象编程)的补充,是一种通过预编译方式和运行期动态代理实现程序功能的技术。它可以让我们将横切关注点(如日志记录、性能统计等)从纵向代码中解耦出来,以提高代码的模块化、可重用性和可维护性。 在Spring AOP中,切面(Aspect)是一个模块化的、跨越多个类的关注点的定义。比如一个日志切面可以定义日志记录的行为,在应用程序的各个模块中进行调用。切面由切点(Pointcut)和增强(Advice)组成。 切点 切点是一个表达式,用于匹配需要织入增强的目标方法。常用的表达式语言是AspectJ表达式,它可以匹配方法的访问修饰符、返回值类型、方法名等。 增强 定义了切面在切点匹配时所执行的具体行为,有以下几种类型: 前置增强(Before Advice):在目标方法执行之前执行。 后置增强(After...
Spring Async异步线程
1. 定义当使用Spring框架进行开发时,我们可能会遇到一些耗时的操作,比如发送邮件、调用第三方接口等。如果直接在主线程中执行这些操作,会导致主线程阻塞,影响系统的响应速度,一般会用到多线程来处理,但线程的创建与销毁是一个开销大的操作,因此一般采用创建线程池的方式来维护线程。但项目一般比较复杂,就会存在一个问题,每个开发人员都维护了一套线程池或每个功能模块都维护了线程池,这样就会导致项目中存在多个线程池,由于线程池中的线程数量是根据cpu的核心数来创建的,多个线程池的意义就不大,且维护了多套。 为了解决这个问题,Spring提供了@Async注解来支持异步执行任务,而且可以统一管理线程池。 2. @Async注解的使用@Async注解可以用来修饰方法或类。当修饰方法时,会将该方法标记为一个异步方法,可以在调用时在新的线程中进行执行。当修饰类时,将会对该类的所有方法生效。 2.1....
Spring Transaction事务
1. 目录[TOC] 2. 介绍当数据持久并非一次性入库的时候需要使用事务保证数据一致性。开启事务一般有两种模式:申明式事务和编程式事务 声明式事务:直接使用@Transactional注解开启事务,其意义为进入注解方法时自动开启事务,内部运行及调用都在事务中,运行完成此方法时主动关闭事务,其好处是程序自动控制并且关闭连接,程序开发时也非常方便。 编程式事务:在方法编写时手动开启事务,并且在用完之后需要手动关闭连接,否则连接不被释放。使用编程式事务大多在申明式事务不方便作用时,如在方法内部调用内部方法时,被调用的方法开启事务。 3....
Spring spring生命周期扩展
1. Bean生命周期 主要扩展钩子函数生命周期图片 Bean生命周期主要分为两部分,第一部分为BeanDefinition的构建及初始化,第二部分为Bean的初始化BeanDefiniton是将bean的相关信息(字段,属性等)封装在一起,实例化初始化bean的时候都在其中获取bean的信息 Bean生命周期的钩子函数主要顺序BeanDefinition:ImportSelector, ImportBeanDefinitionRegistrar,BeanDefinitionRegistryPostProcessor -> BeanFactoryPostProcessor -> FactoryBean ->Bean: BeanPostProcessor -> ObjectProvider -> BeanFactoryAware -> ApplicationContextAware -> @PostConstruct -> InitializingBean -> DisposableBean 2....