Spring系列学习笔记->Spring篇(一)

4、Spring Boot尚硅谷笔记整理高级篇-任务 四、Spring Boot与任务 异步任务、定时任务、邮件任务 一、异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在 处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用 多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完 美解决这个问题。 两个注解: @EnableAysnc、@Aysnc 二、定时任务 项目... 阅读详情

前言   

心得体会   

        本系列是学习spring很唱一段时间之后的一系列学习笔记总结,包括spring篇,springmvc篇和springboot篇。

        我们在项目的实际应用过程中,往往会觉得了解spring的原理没有什么用,不懂为什么,只需要会用,能用出来,发现诶,好像可以运行,结果可以出来就好了。但是往往在开发的过程中会发现,为什么这个启动类启动不了?为什么bean找不到,为什么maven依赖爆红,为什么bean注入不进来,我有启动类啊怎么还扫不到包,怎么往里添加配置类呀,meta下的factory为什么有这个,我们在添加配置类的时候为什么要写在spring.factories里,这些注解为什么加了就可以了,为什么加了注解还不好使,为什么redis启动类写进来了,我们明明只在nacos里配置了,它是怎么读取进去的呢,如何获取上下文?jsp里会出现为什么路径映射了却没有view数据等等问题。

        上述的问题也是我在开发中遇到的一些问题,所以我觉得了解原理不仅仅是为了面试,更是为了我们开发中更流畅,更健壮的代码,更顺利的调试做铺垫,当然这种bug只有遇到了印象才会更加深刻,所以开发和原理往往结合进行的,缺一不可。

系列内容

        本文是该系列的开端,我将会陆续写出springmvc系列和springboot系列,里面会有一些注解,原理之类的学习笔记和心得总结,希望能与大家共勉。

spring

spring部分主要是理解bean,可以把他理解成是做好的东西放到spring容器里,需要的时候可以随时去取

注解

一下省略@符号

spring部分的注解主要是围绕着bean的定义以及使用。

service,controller,component,respository等是用来实例化bean的

autowired是用来根据类型注入bean

qualifier集合autowired一起使用用来根据名称来进行依赖注入

scope标记bean的作用范围

configuration:标记当前是一个配置类,一般用于类级别

componentScan用来指定初始化容器扫描的包

bean:用来标记一个bean,作用一般在方法上,可以把方法返回值放到spring容器里

import:该注解导入的类会加载到ioc容器里面

aspect,标记切面类,after,before,around是用来切面变成

bean生命周期

通过BeanDefinition获取bean的定义信息->调用构造函数实例化bean-> bean的依赖注入-> 处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware) ->Bean的后置处理器BeanPostProcessor-前置-> 初始化方法(InitializingBean、init-method) ->Bean的后置处理器BeanPostProcessor-后置-> 销毁bean

创建bean和初始化赋值bean是分开的

aop

AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

以@Transactional注解为例,

可以定义一个切入点

@Pointcut(@annotation(这里就相当于是某个包下的Transactional类))

public void pointcut(){

}

@Around("pointcut()")

public Object around(ProceedingJoinPoint joinPoint) throws Throwable{

//具体的方法:

//开启事务

//执行代码部分

//事务提交或者回滚事务

}

bean线程安全

spring里创建的bean默认是单例的,不过可以通过scope注解来定义是不是多例的。Scope("prototype")

bean循环依赖

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A 循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖。

大部分循环依赖问题可以通过spring的三级缓存来解决。

构造方法出现循环依赖需要使用懒加载@Lazy

Spring 学习笔记①:IoC容器、Bean与注入 IoC容器、Bean与注入 阅读详情

相关推荐

Spring零基础学习记录篇

Spring零基础学习记录篇 写在开头,这是我的Spring学习之路的打卡帖,算是小白成长之路的见证吧。愿某一天回首,你我都觉得,这条路值得。

TingtingYang 652

Spring IOC系列学习笔记一:前置刷新

Spring源码学习:ApplicationContext 刷新前的配置 文章目录Spring源码学习:ApplicationContext 刷新前的配置前言一、web.xml二、initWebApplicationContext方法总结 前言 众所周知:Spring的核心是refresh方法,但是在执行该方法之前还有一些比较重要的操作,下面我们来讲解一下。 一、web.xml <!-- 以ContextLoaderListener的方式启动spring容器 --> <list

zhengguofeng0328的博客 352

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

最近小编整理了一下一线架构师的Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC,分享给大家一起学习一下~ 注意:有需要免费领取一线架构师的Spring全家桶笔记的朋友,可以点击【学习】免费领取,不要错过哦~ 01 Spring Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,S...

ITjianshuzhai的博客 834

2024年 Spring Boot 系列学习宝典!!!!!

在深入探讨Spring Boot之前,让我们先回顾一下其前身——Spring框架。Spring Boot并不是要替代Spring,而是为了让开发者更加高效地使用Spring而设计的一个工具。和Spring Framework同属于Spring项目家族,被广泛认为是构建应用程序的脚手架。Spring Boot的主要目标是帮助我们快速搭建大型的Spring项目,同时尽可能减少XML配置文件,实现开箱即用,让开发者能够专注于业务逻辑而不是繁琐的配置工作。

weixin_43298211的博客 2032

Java写项目前的准备工作指南(技术栈选择 环境搭建和工具配置 项目结构设计与模块划分)

在开始编写一个 Java 项目之前,做好充分的准备工作是至关重要的。很多初学者可能在没有清晰规划的情况下就开始编写代码,导致项目开发进度缓慢、结构混乱,甚至最终无法按预期完成。而事实上,项目的成功不仅仅取决于编码能力,还包括项目初期的规划和准备。准备工作是确保项目顺利进行的基础,它包括技术选型、环境搭建、需求分析、团队协作及项目管理等多个方面。通过这些准备,我们可以确保项目的开发不仅高效而且有可维护性,最终能交付出高质量的代码。在项目开发过程中,异常处理是非常关键的一部分。

eternal__day的博客 1186

保姆级教程:在RK3568 Debian系统上搞定AIC8800 WiFi与蓝牙驱动(含固件路径与开机自启脚本)

本文提供在RK3568 Debian系统上配置AIC8800 WiFi与蓝牙驱动的保姆级教程,涵盖驱动移植、固件部署、开机自启脚本等关键步骤。通过详细的硬件连接指南、内核配置示例和常见问题解决方案,帮助开发者快速实现无线模块的全功能配置,特别适合嵌入式Linux开发者参考。

weixin_28684825的博客 378

Spring系列一:Spring基础篇

有人说,“Java程序员都是Spring程序员”,本人不太赞成这个观点,但是这也可以看出Spring在Java世界里举足轻重的作用。

退役复学在校大学生,目光所至,皆为华夏 4万+

【报错】sqli-labs靶场搭建出现“Unable to connect to the database: security”

搭建sqli-labs靶场时,“Unable to connect to the database: security”报错解决

九芒星的博客 2988

【SSM】Spring学习笔记3:Spring整合MyBatis和Junit

这一小节的阅读需要一定的。Mybatis主要通过一个核心配置文件(xml文件)来进行数据源的配置和映射管理。映射指的是将一些方法和具体的sql语句绑定起来,使得执行方法的时候自动连接到数据库执行sql语句。具体映射主要通过映射文件进行配置,或者使用注解进行配置。使用注解的方式更加便捷,因此例子中映射方式使用的是注解的形式。

2301_76391858的博客 926

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

PyTorch生成式人工智能(25)——基于Transformer实现机器翻译

不同于循环神经网络 (RNN) 按顺序处理数据,Transformer 以并行的方式处理输入数据(例如句子)。这种并行处理提高了效率,但并未使其能够识别输入的顺序。为了解决这个问题,Transformer 向输入的词嵌入中添加了位置编码。这些位置编码是分配给输入序列中每个位置的独特向量,其维度与输入词嵌入对齐。本节将以英语到法语的翻译为例,通过介绍如何训练 Transformer 模型将英语句子转换为法语,深入理解 Transformer 的架构及自注意力机制的运作方式。

盼小辉丶的博客 2702

Spring AOP系列学习笔记一:AOP简介

文章目录一、AOP常见概念 一、AOP常见概念 Joinpoint(连接点):在系统运行之前,AOP 的功能模块都需要织入到具体的功能模块中。要进行这种织入过程,我们需要知道在系统的哪些执行点上进行织入过程,这些将要在其之上进行织入操作的系统执行点就称之为 Joinpoint,最常见的 Joinpoint 就是方法调用。 Pointcut(切点):切点有有助于缩小切面所通知的连接点的范围,指定一组Joinpoint,定义了Advice发生的地方,例如:execution(* com.zgf.proxy.

zhengguofeng0328的博客 264

【乐企文件生成工程】关于乐企文件生成工程的详细介绍

发票文件生成方式有两种思路:1、根据已有的OFD模板,动态替换ofd模板内容;之后将ofd转pdf(局限:单行问题不大)详情可以在此处了解2、根据html模板动态占位:该工程就是这种方式 ,目前效果良好,可看下图。拿去即用的源码!无任何保留,当然也并不是所有票种都支持(时间有限、精力有限、已经连着转了,要冒烟了…)

九七的博客 2030

Spring IOC系列学习笔记六:invokeBeanFactoryPostProcessors解析

spring

zhengguofeng0328的博客 370

uniapp(微信小程序):实现PDF在线预览+在线预览pdf文件完整示例源码,支持文件来源:服务器pdf外链URL预览、调用后端API接口获取PDF文件流二进制下载及解析打开、上传本地PDF文件预览

uni-app实现PDF预览功能,uniapp微信小程序预览PDF,uniapp开发微信小程序在线预览pdf等文件,uniApp微信小程序实现PDF在线预览,Uniapp app在线预览pdf文件流,微信小程序实现pdf预览(苹果安卓兼容),uniapp-微信小程序 实现pdf外链在线预览,uniapp小程序如何做在线预览pdf功能,uniapp小程序端 实现pdf文件预览,微信小程序(uniapp)PDF预览完整实现方案示例demo源码,uni-app预览PDF,小程序pdf预览插件插件,Uniapp微信

✅ 精选推荐文章 4703

Hyperledger Fabric 网络搭建详解

写在前面:博主也是因为一些原因刚刚入坑区块链,我认为在我们入门新技术的时候,入门总是最困难的部分,只要入门了,后面学习起来就会越来越轻松,在网上找了很多文章,我觉得大多条理不是很清楚。本文章会详细介绍fabric(v1.0)环境部署,以及在搭建过程我遇到一些问题及解决方案,希望可以帮助到你们。 博主环境机器:VMware15 Ubuntu16.04 fabric(v1.0)环境部署一、必备软件安装1.ubuntu环境安装2.Go语言3.Docker安装4. Docker-Compose 安装二、Fa.

林中有神君 1万+

Spring IOC系列学习笔记四:parseCustomElement解析

Spring系列学习笔记四:parseCustomElement解析 原文地址程序员囧辉大佬 文章目录Spring系列学习笔记四:parseCustomElement解析前言代码块一:parseBeanDefinitions代码块二:parseCustomElement代码块三:resolve代码块四:getHandlerMappings代码块五:init代码块六:parse代码块七:parse总结 前言 前面我们已经解析了默认命名空间的解析,现在继续解析定制的命名空间解析,开始吧。 代码块一:pars

zhengguofeng0328的博客 331

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring IOC系列学习笔记二:obtainFreshBeanFactory方法

Spring源码学习:obtainFreshBeanFactory方法 原文地址程序员囧辉大佬 文章目录Spring源码学习:obtainFreshBeanFactory方法前言obtainFreshBeanFactory方法概述代码块一:obtainFreshBeanFactory代码块二:refreshBeanFactory代码三:loadBeanDefinitions代码块四:loadBeanDefinitions代码块五:loadBeanDefinitions总结 前言 已经把refresh方法

zhengguofeng0328的博客 334

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring IOC系列学习笔记八:finishBeanFactoryInitialization

系列文章目录 原文地址程序员囧辉大佬 文章目录系列文章目录前言代码块一:finishBeanFactoryInitialization 前言 该方法会实例化所有剩余的非懒加载单例 bean。除了一些内部的 bean、实现了 BeanFactoryPostProcessor 接口的 bean、实现了 BeanPostProcessor 接口的 bean,其他的非懒加载单例 bean 都会在这个方法中被实例化,并且 BeanPostProcessor 的触发也是在这个方法中。 代码块一:finishBean

zhengguofeng0328的博客 255

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Spring系列学习一、Spring框架的概论

Spring框架为应用提供了轻量级容器,对系统资源的消耗较小,同时,Spring的IoC(控制反转)和AOP特性使得代码运行高效,并且Spring本身提供了丰富的对缓存、数据库等的处理机制,使得性能优化更方便。

编程小蜜蜂 1282

Spring IOC系列学习笔记三:parseDefaultElement详解

Spring系列学习笔记三:parseDefaultElement详解 原文地址程序员囧辉大佬 文章目录Spring系列学习笔记三:parseDefaultElement详解前言代码块一:parseDefaultElement代码块二:processBeanDefinition代码块三:parseBeanDefinitionElement代码块四:parseBeanDefinitionElement代码块五:parseBeanDefinitionAttributes代码块六:parseConstructor

zhengguofeng0328的博客 335

Spring IOC系列学习笔记十二:@Autowire注解

原文地址程序员囧辉大佬 文章目录前言开启Spring的注解配置代码中使用继承结构源码解析AutowiredAnnotationBeanPostProcessor 何时被注册到 BeanFactory?AnnotationConfigUtils#registerAnnotationConfigProcessors构造函数注入 前言 我们介绍一个我们在Spring开发中的最常用的注解@Autowire,在前面createBean方法(上)的代码块三的4.2和createBean方法(下)的代码块一和代码块四

zhengguofeng0328的博客 371

Spring IOC系列学习笔记九:getBean方法

Spring IOC系列学习笔记九:getBean方法 原文地址程序员囧辉大佬 文章目录Spring IOC系列学习笔记九:getBean方法前言代码块一:getBean 前言 前面讲解了finishBeanFactoryInitialization方法,接着进入getBean方法的解析。 代码块一:getBean @Override public Object getBean(String name) throws BeansException { return doGetBean(name,

zhengguofeng0328的博客 437

Spring AOP系列学习笔记二:AOP入口分析

原文地址程序员囧辉大佬 文章目录前言基于xml的方式AspectJAutoProxyBeanDefinitionParser#parse代码块一:registerAspectJAnnotationAutoProxyCreatorIfNecessary代码块二:AopConfigUtils#registerAspectJAnnotationAutoProxyCreatorIfNecessary 前言 我们分析基于注解的aop应该如何做,无论是xml配置(<aop:aspectj-autoproxy

zhengguofeng0328的博客 421

Spring IOC系列学习笔记十一:createBean方法(下)

原文地址程序员囧辉大佬 文章目录前言代码块一:applyMergedBeanDefinitionPostProcessors代码块二:getEarlyBeanReference代码块三:addSingletonFactory代码块四:populateBean代码块五:autowireByName 前言 前面讲解了创建Bean实例的createBeanInstance方法,下面我们对doCreateBean其他方法进行解析。 protected Object doCreateBean(final Stri

zhengguofeng0328的博客 278

Spring IOC系列学习笔记十:createBean方法(上)

Spring IOC系列学习笔记十:createBean方法(上) 原文地址程序员囧辉大佬 文章目录Spring IOC系列学习笔记十:createBean方法(上)前言代码块一:createBean代码块二:resolveBeforeInstantiation 前言 继续前面getBean的讲解进入createBean方法。 代码块一:createBean @Override protected Object createBean(String beanName, RootBeanDefiniti

zhengguofeng0328的博客 284
上一篇: Mysql学习笔记系列(二)
下一篇: juc并发线程学习笔记(一)
happystudy_neu
博客等级 码龄4年 1140粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值