百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

一文带你学习Spring框架从入门到精通,通向架构师道路的必经之学

ccwgpt 2024-09-14 00:11 28 浏览 0 评论

今日分享开始啦,请大家多多指教~

第一章:认识Spring

Spring认识框架

spring全家桶: spring ,springmvc,spring boot,spring cloud

spring:出现在2002左右,解决企业开发的难度,减轻对项目模块之间的管理。

类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。

spring核心技术ioc ,aop 。能实现模块之间,类之间的解耦合。

依赖: classa中使用classb的属性或者方法,叫做classa依赖classb。

Spring框架内部模块

第二章 IoC控制反转

IoC概念

框架怎么学:框架是一个软件,是其它人写好的软件。知道框架能干啥, 具体的使用步要就行。

1)知道框架能做什么,mybatis--访问数据库, 对表中的数据执行增删改查。

2)框架的语法,框架要完成一个功能,需要一定的步骤支持的。

3)框架的内部实现,框架内部怎么做,原理是什么。

4)通过学习,可以实现一个框架。

spring的第一个核心功能ioc

IOC (Inversion of Control) :控制反转,是一个理论,概念,思想。

描述的:把对象的创建,赋值,管理工作都交给代码之外的容器实现,也就是对象的创建是有其它外部资源完成。

控制:创建对象,对象的属性赋值,对象之间的关系管理。

反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象。创建对象,给属性赋值。
正转:由开发人员在代码中,使用new构造方法创建对象,开发人员主动管理对象。

public static void main(string args[]){
student student - new Student();//在代码中, 创建对象。--正转。

}

容器:是一个服务器软件,一 个框架(spring)

为什么要使用ioc :目的就是减少对代码的改动,也能实现不同的功能。实现解耦合。

创建对象的方式

为什么要使用ioc :目的就是减少对代码的改动,也能实现不同的功能。实现解耦合。

java中创建对象有哪些方式:

1.构造方法,new student ( )

2.反射

3.序列化

4.克隆

5.ioc。容器创建对象

6.动态代理,利用反射机制在运行时创建代理类。

IoC的实现技术

ioc的体现:
servlet

1.创建类继承HttpServelt
2.web.xml 注册 servlet ,使用<servlet-name> myservlet </ servlet-name>
<servelt-class>com. bjpwernode.controller.MyServlet1</servlet-class>
3.没有创建Servlet对象,没有 MyServlet myservlet = new MyServlet ()
4. Servlet是Tomcat服务器它能你创建的。Tomcat也称为容器。
Tomcat作为容器:里面存放的有Servlet对象,Listener ,Fil ter对象
IoC的技术实现

DT是inc的技术实现

DI ( Dependency Injection) : 依赖注入,只需要在程序中提供要使用的对象名称就可以,至

赋值,查找都由容器内部实现。

spring是使用的di实现了ioc的功能,spring底层创建对象,使用的是反射机制。

第一个例子创建对象

创建spring配置文件

创建容器对象ApplicaitonContext【拿到spring创建的对象】

spring创建对象的时机

获取容器中对象信息的api

创建非自定义对象

设值注入概念【注入就是赋值】

ch02-di-xml:在spring的配置文件中,给java对象的属性赋值。

di:依赖注入,表示创建对象,给属性赋值。

di的实现有两种:

1.在spring的配置文件中,使用标签和属性完成,叫做基于XML的di实现。

2.使用spring中的注解,完成属性赋值,叫做基于注解的id实现。

di的语法分类:

1. set注入(设置注入) : spring调用类的set方法,在set方法可以实现属性的赋值。

80左右都是使用的set注入。

2.构造注入,spring调用类的有参数构造方法,创建对象。在构造方法中完成赋值。

简单类型的设值注入实现

单元测试junit

就是因为在main文件中测试不方便,不能独立测试每一个方法,所以提出单元测试。

junit :单元测试,一个工具类库,做测试方法使用的。

单元:指定的是方法,一个类中有很多方法,一个方法称为单元。

使用单元测试

1.需要加入junit依赖。

<dependency>

<groupId>junit</groupId>

<arti factId> junit </arti factId><version>4.11</version>

<scope>test</ scope>

</ dependency>

2.创建测试作用的类:叫做测试类

src/ test/java目录中创建类

3.创建测试方法

1) public玩法

2)没有返回值void

3)方法名称自定义,建议名称是test +你要测试万法名称

4)方法没有参数

5)方法的上面加入@Test,这样的方法是可以单独执行的。不用使用main方法。

设值注入【set注入】的注意事项

设值注入只是使用set方法

xml文件规定,所有的属性必须放在引号中,int类型的数据也一样。

设值注入也可以给别人写的类进行赋值,只要有对用的set方法就行。

引用类型的设值注入

构造注入

构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即使用构造器设置依赖关系。

还可以省略index。

构造注入创建文件对象

复习第一天内容【思维导图】

IoC作业

自动注入byName

简化对于引用类型的重复赋值,减少冗余。

自动注入byType

2. byType(按类型注入) : java类中引用类型的数据类型和spring容器中(配置文件) <bean>的class是同源关系的,这样的bean能够赋值给引用类型。

同源就是一类的意思:

1.java类中引用类型的数据类型和bean的class的值是样的。

2.java类中引用类型的数据类型和bean的class的值父子类关系的。

3.java类中引用类型的数据类型和bean的class的值接口和实现类关系的

语法:

<bean id="xx" class="yyy" autowire= "byType">

简单类型属性赋值

</bean>

为什么使用多配置文件

大型项目中,需要多个配置文件。

多个配置优势

1.每个文件的大小比一个文件要小很多,效率高。

2.避免多入竞争带来的冲突。

如果你的项目有多个模块(相关的功能在一起),一个模块一个配置文件。

学生考勤模块一个配置文件,张三

学生成绩一个配置文件,李四

多文件的分配方式:

1.按功能模块,一个模块一个配置文件

2.按类的功能,数据库相关的配置一个文件配置文件,做事务的功能一个配置文件,做service功能的一个配置文件等。

包含关系的配置文件

注解的使用步骤

基于注解的di:通过注解完成java对象创建,属性赋值。

使用注解的步骤:

1.加入maven的依赖spring-context ,在你加入spring- context的同时,间接加入spring- aop的依赖,使用注解必须使用spring-aop依赖。

2.在类中加入spring的注解(多个不同功能的注解)

3.在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你的项目中的位置。

学习的注解:

1.@Component

2.@Respotory

3.@service

4.@Controller

5.@value

6.@Autowired

7.@Resource

Component注解使用

组件扫描器

多注解项目分层

@Component(value = "myStudent ")等同于

<bean id= "myStudent" class="com.bjpowernode.ba01.Student" />

spring中和@Component功能一致,创建对象的注解还有:

1. @Repository (用在持久层类的上面) :放在da的实现类上面,表示创建dao对象,dao对象是能访问数据库的。

2.@Service(用在业务层类的上面) :放在service的实现类上面,创建service对象,service对象是做业务处理,可以有事务等功能的。

3. @Controller(用在控制器的上面) :放在控制器(处理器)类的上面,创建控制器对象的,控制器对象,能够接受用户提交的参数,显示请求的处理结果。

以上三个注解的使用语法和@Component 一样的。都能创建对象,但是这三个注解还有额外的功能。

@Repository,@service , @Controller 是给项目的对象分层的。

不清楚要用上面三个注解的情况就用@Component。

扫描多个包的方法

简单类型属性赋值

引用类型属性赋值AutoWired自动注入,使用byType

步骤:首先扫描配置文件ApplicaitonContext,使用组件扫描器扫描base-package,创建包中所有对象,根据其中的注解注入【赋值】。

引用类型属性赋值AutoWired自动注入,使用byName

比较

引用类型AutoWired的required属性

引用类型

@Autowired:spring 框架提供的注解,实现引用类型的赋值。

spring中通过注解给引用类型赋值,使用的是自动注入原理, 支持byName, byType。

@Autowired:默认使用的是byType自动注入。

属性:required,是 一个boolean类型的,默认true。

required=true :表示引用类型赋值失败,程序报错,并终止执行。

required=false :引用类型如果赋值失败,程序正常执行,引用类型是null。

引用类型AutoWired的required属性推荐使用默认值true

使用true, 尽早解决程序中的问题,报错。

引用类型Resource

Resource是来自于JDK中的注解,不是来自于spring的。

引用类型

@Resource:来自jdk中的注解,spring框架提供J对这个注解的功能支持,可以使用它给引用类型赋值。使用的也是自动注入原理,支持byName ,byType ,默认是byName。

位置: 1. 在属性定义的上面,无需set方法,推荐使用。

2.在set方法的上面

//默认是byNamel

@Resource

xml配置文件和注解的对比

经常改的就是使用xml配置文件、不经常改的就使用注解。

注解为主,配置文件为辅

复习【控制反转】

复习动态代理的实现方式

使用动态代理的目的是在不改变原先类的基础上,对其进行功能增强。

JDK 动态代理

动态代理的实现方式常用的有两种:使用JDK的Proxy,与通过CGLIB生成代理。Jdk的动态要求目标对象必须实现接口,这是java设计上的要求。

从jdk1.3以来,java 语言通过java.lang.reflect 包提供三个类支持代理模式Proxy,Method 和InovcationHandler。

CGLIB动态代理(了解)

CGLIB的要求更低

CGLIB(Code Generation Library)是一个开源项目。是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java 类与实现Java接口。它广泛地被许多AOP的框架使用,例如Spring AOP。

使用JDK 的Proxy 实现代理,要求目标类与代理类实现相同的接口。若目标类不存在接口,则无法使用该方式实现。但对于无接口的类,要为其创建动态代理,就要使用CGLIB来实现。.

CGLIB代理的生成原理是生成目标类的子类,而子类是增强过的,这个子类对象就是代理对象。所以,使用CGLIB生成动态代理,要求目标类必须能够被继承,即不能是final 的类。

CGLIB经常被应用在框架中,例如Spring ,Hibernate等。cglib 的代理效率高于Jdk。项目中直接使用动态代理的地方不多。一般都使用框架提供的功能。

用注解实现Ioc作业

1、加入依赖

2、创建类,在类中加入注解

3、声名组件扫描器

使用动态代理实现一个功能增强

今日份分享已结束,请大家多多包涵和指点!

相关推荐

十分钟让你学会LNMP架构负载均衡(impala负载均衡)

业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

AGV仓储机器人调度系统架构(agv物流机器人)

系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...

远程热部署在美团的落地实践(远程热点是什么意思)

Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...

springboot搭建xxl-job(分布式任务调度系统)

一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...

大模型:使用vLLM和Ray分布式部署推理应用

一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...

国产开源之光【分布式工作流调度系统】:DolphinScheduler

DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...

简单可靠高效的分布式任务队列系统

#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...

虚拟服务器之间如何分布式运行?(虚拟服务器部署)

  在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...

一文掌握 XXL-Job 的 6 大核心组件

XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...

京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?

京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...

企业级项目组件选型(一)分布式任务调度平台

官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...

python多进程的分布式任务调度应用场景及示例

多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...

SpringBoot整合ElasticJob实现分布式任务调度

介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...

SpringBoot任务调度:@Scheduled与TaskExecutor全面解析

一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...

取消回复欢迎 发表评论: