java-Spring框架-入门学习-第一天

 Spring 定义

​Spring是一款主流的 Java EE 开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。

​ 自2004年4月,Spring1.0 版正式发布以来,Spring已经步入到了第6个大版本,即 Spring6,本课程采用 Spring5.3.24 正式版本。


Spring的两个核心模块

IoC控制反转

Inverse of Control 的简写,为 控制反转,指把创建对象交给 Spring 进行管理。

作用 IoC使得代码不在直接依赖具体的对象,而依赖一个抽象,这个抽象运行会由IoC容器来注入具体的对象
反转资源获取方向,把自己创建资源、向环境索取资源的方式变为环境自动将资源准备好,我们享受资源注入。

AOP面向切面编程

Aspect Oriented Programming 的简写,为 面向切面编程。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块共同调用的逻辑封装起来,减少系统的重复代码

相关概念

IoC容器
IoC容器是用来实现IoC思想的一个工具或者说技术手段
它能够自动扫描应用程序中的对象,将它们实例化,并自动注入它们所需要的依赖对象,使应用程序的开发人员能够更加专注于业务逻辑的实现,而不用关心对象的创建和管理。Spring通过IoC容器来管理所有的Java对象的实例化和初始化,控制着对象与对象之间的依赖关系。

简单来说:  负责对象的实例化,定位,配置以及建立对象间的依赖关系

依赖注入DI

DI (Dependency Injection):依赖注入,依赖注入实现了控制反转的思想,是指Spring创建对象的过程中,将对象依赖属性通过配置进行注入。

依赖注入是一种将依赖关系从代码中分离出来,由Ioc容器在运行时动态注入到对象中的技术

依赖注入由两种注入方式 设值注入和构造注入 设值注入通过setter方法将依赖对象注入到被依赖对象中,构造注入则是构造被依赖对象是,通过构造函数参数 将依赖对象传入

IoC容器实现

Spring中的IoC容器就是IoC思想的一个落地产品实现。IoC容器中管理的组件也叫做bean。在创建bean之前,首先需要创建IoC容器,Spring提供了IoC容器的两种实现方式

  • BeanFactory

    这是IoC容器的基本实现,是Spring内部使用的接口,面向Spring本身,不提供给开发人员使用。

  • ApplicationContext

    BeanFactory的子接口,提供了更多高级特性,面向Spring的使用者,几乎所有场合都使用 ApplicationContext,而不使用底层的BeanFactory。

ApplicationContext的实现方式
类型说明
AnnotationConfigApplicationContext使用注解构建IoC容器
ClassPathXmlApplicationContext使用XML配置文件方式构建SpringIoC容器

Bean对象定义及获取

在Spring框架规范中,所有由spring管理的对象都称之为Bean对象

  

Spring定义在类上的注解
注解说明
@Component

用于描述Spring中的Bean,泛化概念,作用与任何层次,

使用时只需将该注解标注在相应的类即可

@Repository

用于数据访问层(Dao层)的类标识为Spring中的Bean

功能同@Component相同

@Service

用于业务层(Service层)的类标识为Spring中Bean

功能@Component相同

@Controller

用于控制层(Spring MVC的Controller)的类标识为

Spring中的Bean功能@Component相同

Bean对象获取

这边常见用的是通过注解获取对象Bean对象

//这边我们先需要创建一个被注解定义的java类,让其变成Spring Bean
@Component
class User{}
//这边创建一个测试类用于测试User的实例化对象被创建了
class TestUser{
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext("user的java包名");
User user = context.getBean(User.class);
System.out.println("user地址: " + user);}}
依赖注入

第一种 : @Value 值的注入

//这边使用的是依赖注入第一种 @Value值的注入
@Repository
public class User {@Value("jdbc:mysql://localhost:3306/test")private String databaseUrl;@Value("root")private String username;@Value("root")private String password;@Overridepublic String toString() {return "UserDao{" +"databaseUrl='" + databaseUrl + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

执行操作

第二种构造参数注入

1 普通类对象

//这边使用的自动装配 @Autowired 这边使用的包名 demo.test.user
@Component
class User{
}
@Component
class UserDealWith{
@Autowired 
private User user;
}
class TestUser{
ApplicationContext context = new AnnnotationConfigApplicationContext("demo.test.user");
User user = context.getBean(User.class);
System.out.printIn("user"+ user)
}

解释

TestUser类现在包含了一个main方法,这样您就可以直接运行它。AnnotationConfigApplicationContext会加载包demo.test.user下的组件,并且因为UserDealWith类中有@Autowired注解,Spring会尝试自动装配一个User类型的bean。如果User类是一个组件(由@Component注解标记),并且没有多个同类型的bean导致歧义,那么UserDealWith中的user字段将会被自动装配。 

2.接口对象

//这边执行的包名 demo.test.user
interface Product {}  @Component  
class Window implements Product {}  @Component  
class WindowDealWith {  @Autowired  private Product product;  
}  public class TestProduct {  public static void main(String[] args) {  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("demo.test.user");  WindowDealWith deal = context.getBean(WindowDealWith.class);  }  
}

WindowDealWith类通过 @Autowired 注解注入了一个 Product 类型的 product字段。由于 Window 类实现了Product 接口,Spring 会尝试在上下文中找到一个类型为Product  的 bean,并自动将它注入到WindowDealWith 的 product字段中。

一旦注入完成,WindowDealWith 类的实例 deal 就可以通过  product 字段来调用 Product  接口中定义的方法(如果Window​​​​​​​ 类提供了这些方法的实现的话)。但需要注意的是,你只能调用 Product  接口中声明的方法,而不能直接调用 Window 类特有的方法,除非你将  product  字段的类型更改为Window 或其超类/接口。

 @Resource 很少用,这边我主要记住其和@Autowired的区别

本次学习的问题

说说 @Autowired 注解和 @Resource 注解的区别?  

@Autowired注解是类型驱动的注入,它会根据字段或方法的类型在Spring容器中查找匹配的Bean进行注入。如果存在多个相同类型的Bean,可以通过@Qualifier注解来指定具体的Bean名称或ID。

@Resource注解则是名称驱动的注入,它会根据注解中的name属性来查找匹配的Bean进行注入。如果未指定name属性,Spring会先按类属性的变量名查找,如果还是未找到,则按类型进行查找。

@Resource注解在解决多个相同类型Bean的问题时,只要保证Bean命名唯一,就可以避免冲突。
在使用位置上

@Autowired注解可以放置在构造方法、Setter方法、字段和方法上,提供了更大的灵活性。

而@Resource注解则只能放置在Setter方法和字段上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625978.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pyhon】while语句的题目

1.计算1至100的偶数之和 sum_even 0 # 初始化偶数之和为0 i 1 # 从1开始循环 while i < 100: # 当i小于或等于100时&#xff0c;继续循环 if i % 2 0: # 如果i是偶数 sum_even i # 将i加到偶数之和上 i 1 # i自增1 print(“1至100的偶数之和为:”, sum_even) 给出乘…

Linux硬件管理

文章目录 Linux硬件管理1.查看磁盘空间 df -h2.查看文件的磁盘占用空间 du -ah3.查看系统内存占用情况 htop Linux硬件管理 1.查看磁盘空间 df -h 语法 df [选项][参数]选项 -a或–all&#xff1a;包含全部的文件系统&#xff1b; –block-size<区块大小>&#xff1a;…

基于接缝裁剪的图像压缩算法研究

基于接缝裁剪的图像压缩算法研究 引言接缝裁剪算法概述a. 可能接缝数量的证明b. 破坏度最低接缝的寻找 算法设计伪代码C语言实现 时间复杂度分析结论 引言 在数字图像处理领域&#xff0c;图像压缩技术是一种非常重要的技术&#xff0c;它能够减少图像文件的存储空间和传输带宽…

P450焕新而来,室内外两用+路径规划+YOLO点击跟踪,算力高达100TOPS

Prometheus 450&#xff08;简称P450&#xff09;是一款室内室外两用的中型轴距&#xff08;410mm&#xff09;无人机&#xff0c;基于F450基础飞行平台&#xff0c;搭载感知传感器二维平面激光雷达&#xff0c;双目深度相机等&#xff0c;配合软件Prometheus自主无人机系统和S…

Cloudflare Workers 付费文档

定价 默认情况下&#xff0c;用户可以访问Workers免费计划。Workers免费计划包括对Workers、Pages Functions和Workers KV的有限使用。了解更多关于免费计划限制的信息。 Workers付费计划包括Workers、Pages Functions、Workers KV和Durable Objects的使用&#xff0c;每个账…

[大模型]InternLM2-7B-chat WebDemo 部署

InternLM2-7B-chat WebDemo 部署 InternLM2 &#xff0c;即书生浦语大模型第二代&#xff0c;开源了面向实用场景的70亿参数基础模型与对话模型 &#xff08;InternLM2-Chat-7B&#xff09;。模型具有以下特点&#xff1a; 有效支持20万字超长上下文&#xff1a;模型在20万字…

OSPF - 链路状态路由协议

IGP 外部网关路由协议&#xff1a; OSPF &#xff0c; IS-IS EGP 内部网关路由协议&#xff1a; BGP 协议算法&#xff1a; 距离矢量路由协议 链路状态路由协议 lsdb:链路状态数据库 - 存放lsa的地址 RIP&#xff1a;有方向的矢量&#xff0c;距离矢量路由协议&#xf…

2024 年排名前 5 的 CSS 框架

文章目录 1、Bootstrap2、Tailwind CSS3、Foundation4、Bulma5、UIKit 1、Bootstrap Bootstrap框架是由Twitter的设计师Mark Otto和Jacob Thornton合作开发的&#xff0c;于2011年8月在GitHub上发布。它是目前最受欢迎的前端框架之一&#xff0c;被广泛应用于各种Web项目中。Bo…

【喜讯】优积科技受邀第五届上海建筑装配式内装产业大会,荣获两项大奖

2024年3月27-31日&#xff0c;由上海市内装饰行业协会装配式内装产业专业委员会、国家建筑装配式内装产业基地联合组织发起主办“第五届2024 |上海建筑装配式内装产业大会暨装配式装修新材料推广会”&#xff0c;大会以“高技术、高质量、高水平”为主题&#xff0c;聚焦于推动…

数据结构进阶之堆

今天我们学习的是数据结构里面的堆&#xff0c;大家先看看我们今天要学习的内容 一、堆概念及认识 在学习堆之前我们得先明白完全二叉树是什么样子&#xff0c;因为堆是依据完全二叉树的结构来实现的&#xff0c;所以在这里我先告诉大家完全二叉树的是什么&#xff0c;如下图…

linux运行ant 报错 Unable to locate tools.jar【已解决】

linux安装 ant 运行时报错 Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/lib/tools.jar 原因 已安装的jdk只有运行环境&#xff0c;没有tool.jar&#xff0c;而ant运行需要java开发环境&#xff0c;因…

通过腾讯云搭建跨境电商demo的详细操作过程(建站系统 保姆级指导,巨详细)

引言&#xff1a; 有许多做跨境电商的朋友&#xff0c;或者为跨境电商服务的小企业&#xff0c;都会面临搭建电商平台V1.0的问题 因此&#xff0c;花了点时间&#xff0c;找了一个开源的项目&#xff0c;让大家可以跑起来&#xff0c;一方面了解平台都有哪些模块&#xff0c;另…