Spring——五大类注解和方法注解详解

news2024/9/20 8:12:30

文章目录

  • 1.Spring的创建
  • 2.Spring对象的存储
  • 3.将 Bean 对象通过配置文件注册到 Spring 当中
  • 4.从 Spring 中将 bean 对象读取出来并使用
    • 4.1 先得到 Spring 上下文对象
    • 4.2 再通过上下文对象提供的方法获取需要使用的baen对象
    • 4.3 使用bean对象[可选步骤]
    • 4.4 获取 getBean 的更多方法
  • 5.ApplicatonContext VS BeanFactory
  • 6.总结
  • 7. 更简单的读取存储Bean(使用注解)
    • 7.1 前置工作(配置扫描路径)
  • 8. 使用类注解和方法注解
    • 8.1 使用五大类注解
    • 8.2为什么需要五大注解以及其中的关系
    • 8.3 使用方法注解 @Bean
      • 8.4 配合 方法注解配合类注解使用
    • 8.5 重命名 Bean
  • 9. 对象注入(对象装配)
    • 9.2 属性注入和构造方法注入以及 Setter 注入的区别
    • 另一种注入注解 @Resource
  • 10.@Resource vs @Autowired

1.Spring的创建

  1. 先创建一个 maven 项目
    在这里插入图片描述

  2. 添加 Spring 框架支持(Spring-context/Spring-beans)
    配置 pom.xml
    在这里插入图片描述

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

配置 spring-config.xml
在这里插入图片描述
添加如下代码
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.beans"></content:component-scan>
</beans>
  1. 创建一个启动类并添加 main

在这里插入图片描述

2.Spring对象的存储

存储 Bean 分为一下3步:

  1. 存储 Bean 之前,先创建 Bean
    在这里插入图片描述
    在这里插入图片描述

  2. 配置文件 Spring-confing.xml

  3. 将创建的 Bean 注册到 Spring 容器中

3.将 Bean 对象通过配置文件注册到 Spring 当中

在这里插入图片描述

id 可以不同于 class 里面的类名的,但是要尽量符合规范

4.从 Spring 中将 bean 对象读取出来并使用

4.1 先得到 Spring 上下文对象

4.2 再通过上下文对象提供的方法获取需要使用的baen对象

4.3 使用bean对象[可选步骤]

在这里插入图片描述

4.4 获取 getBean 的更多方法

在这里插入图片描述

5.ApplicatonContext VS BeanFactory

在这里插入图片描述
相同点:

都可以实现从容器中获取 Bean,都提供了 getBean 的方法

不同点:

  1. ApplicationContext 属于 BeanFactory 的子类BeanFacotory 只提供了 基础访问 Bean 的方法而 ApplicationContext 除了拥有 BeanFactory 的所有功能之外,还提供了更多的方法实现,比如对国际化的支持,资源访问的支持,以及事件和传播等方面的支持
  2. 从性能来说 二者是不同的,BeanFactory 是按需加载 Bean的,而 ApplicationContext 是饿汉方式,在创建时会将所有的 Bean 都加载起来,以为以后使用

6.总结

在这里插入图片描述

7. 更简单的读取存储Bean(使用注解)

7.1 前置工作(配置扫描路径)

在配置文件中配置扫描路径

在这里插入图片描述

8. 使用类注解和方法注解

  1. 类注解:@Controller[控制器] ,@Service[服务], @Repository[仓库 ],@Configuration[配置] ,@Component[组件]
  2. 方法注解:@Bean

8.1 使用五大类注解

@Controller[控制器]

在这里插入图片描述
@Service[服务]

在这里插入图片描述
@Repository[仓库]

在这里插入图片描述

@Configuration[配置]
在这里插入图片描述
@Component[组件]

在这里插入图片描述

注意:当我们使用 bean 和 类型 获取 bean 时,bean的名字 要用小驼峰

在这里插入图片描述

8.2为什么需要五大注解以及其中的关系

目的:让代码可读性提高,能直观的判断当前类的用途

在这里插入图片描述

8.3 使用方法注解 @Bean

8.4 配合 方法注解配合类注解使用

在Spring 框架的设计中,方法注解 @Bean 要配合类注解才能将对象存储到Spring容器中

  1. 创建一个 Bean
    在这里插入图片描述

  2. 创建一个 User 对象

在这里插入图片描述

  1. 在启动类当中获取 User 对象

tips:这里 获取 Bean 的方式,Bean 的名称 只能是方法名


public class App {
    public static void main(String[] args) {
       //1. 先得到上下文对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
 
        User user = context.getBean("user1",User.class);
        System.out.println(user);
    }
}

8.5 重命名 Bean

@Bean 命名规则

当没有设置 name 属性时,那么 Bean 默认的名称是方法名当设置了 name 属性之后,只能通过重命名的 name 属性对应的值来获取,也就是说重命名之后,再使用方法名就获取不到 Bean 对象
当 UserBean 类中有多个对象时,可以通过设置 name 属性给 Bean 对象进行重命名操作,如下代码:

在这里插入图片描述

通过使用 Bean 里面的 name 就可以获取到对象

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9. 对象注入(对象装配)

前面我们讲的 五大类注解和方法注解都是将 对象存储到 Spirng 当中,而对象的注入(对象的装配)是把对象从 Spring 当中 取出来

对象注入,我们提供了三种注入的方式:

  1. 属性 注入(字段注入)
  2. 构造方法 注入
  3. Setter 注入

9.2 属性注入和构造方法注入以及 Setter 注入的区别

属性注入:

写法简单,但是通用性不好,它只能运行在 IoC 容器下,如果是非 IoC 容器就会出现问题

在这里插入图片描述

Setter注入:

早期 Spring 版本推荐的写法,Setter 注入的通用性没有构造方法注入通用

在这里插入图片描述

构造方法注入:

通用性更好,他能确保在使用注入对象之前,此注入对象一定初始化过了,当构造方法注入参数过多时,此时开发者就要检查自己所写代码是否符合单一设计原则的规范了,此注入方式也是 Spring 后期版本中推荐的注入方式

在这里插入图片描述

另一种注入注解 @Resource

注意事项:@Resource 支持属性注入和 Setter 注入,但不支持构造方法注入

10.@Resource vs @Autowired

  1. 出身不同:@Resource 来自于 JDK,@Autowired 是 Spring 框架提供的
  2. 用法不同:@Autowired 支持 属性注入,构造方法注入和Setter 注入,而 @Resource 不支持构造方法注入
  3. 支持的参数不同:@Resource 支持大量参数,不如 name ,type 设置,而 @Autowired 只支持 required 参数设置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)

N1-甲基腺苷&#xff08;N1-methyladenosine&#xff0c;m1A&#xff09;是一种普遍存在于真核生物tRNA、rRNA和mRNA且可逆的转录后RNA修饰。基于高通量测序技术最新研究揭示m1A RNA修饰在基因调控和生物过程中的关键作用&#xff1a;对RNA稳定性和翻译起始等过程有着重要调节作…

Mybatis+Spring+SpringMVC及SSM整合

文章目录一、Mybatis&#xff08;一&#xff09;Mybatis简介1、Mybatis历史2、Mybatis特性3、Mybatis下载4、和其它持久化层技术对比&#xff08;二&#xff09;搭建Mybatis1、MySQL不同版本的注意事项2、创建Maven工程1、引入依赖3、创建MyBatis的核心配置文件3.1、核心配置文…

WRF进阶:WRF中Noah-MP地面方案中雪反照率的计算

Noah-MP简介 Noah-MP是以Noah-LSM为基础发展的一种多层模型&#xff0c;相对于Noah-LSM&#xff0c;它对于下垫面的冠层、土壤、积雪有了更多的拓展。 Noah-MP允许3层雪&#xff0c;对于雪的模拟有了极大的提升&#xff0c;同时&#xff0c;Polar-WRF中对Noah LSM和Noah MP中海…

IIS 部署HTTP 转 HTTPS完整版

1,准备SSL证书&#xff0c;阿里云有1年免费证书 免费证书有 20个&#xff0c;每年用一个就行 审核通过后下载 下载文件包含证书文件和密码 2.安装重定向模块 如果IIS上默认有安装Web平台安装程序&#xff0c;我们可以使用平台自动安装URL Rewrite重写工具&#xff0c;也可以…

Tomcat日志分割

使用cronolog日志切分工具 RPM包下载方法&#xff1a;在 rpmfind.net 上搜索cronolog选择对应RPM包复制下载链接即可 下载安装 cronolog yum install https://rpmfind.net/linux/epel/7/x86_64/Packages/c/cronolog-1.6.2-14.el7.x86_64.rpm -y验证是否安装成功及安装位置 使…

《安卓逆向》Magisk的编译踩坑记录-安装方法-分享魔改后的Magisk过root检测方法

为什么: 1.体验下如何编译面具源码 2.魔改面具-绕过更深的root检测 1.ubuntu 虚拟机下载地址 http://mirrors.aliyun.com/ubuntu-releases/20.04/github:https://github.com/topjohnwu/Magisk 编译根据这篇文章做好前缀下代码工作 https://zhuanlan.zhihu.com/p/385255256编…

图片1920x1080分辨率怎么调 ?图片如何修改分辨率?

图片是我们日常生活中经常需要使用到的东西&#xff0c;但是在使用图片时我们会遇到需要调图片分辨率的情况&#xff0c;有很多小伙伴对于图片分辨率这个概念并不了解&#xff0c;今天就来为大家具体介绍一下图片1920x1080怎么调以及怎么给图片修改分辨率&#xff0c;下面一起来…

美食杰项目 -- 首页(一)

目录前言&#xff1a;具体实现思路&#xff1a;步骤&#xff1a;1. 展示美食杰项目首页效果2. 引入 element-ui3. 头部代码4. 首页内容总代码5. 轮播图代码6. 已发布菜品内容代码7. 加载图片页面代码总结&#xff1a;前言&#xff1a; 本文给大家讲解&#xff0c;美食杰项目中…

Windows右键菜单美化(适用版本:Win7-Win11) 奇怪的美化教程 #1

在我的上篇文章中&#xff0c;只有 0% 的人点了赞 咋一人没有啊&#xff01; 所以如果觉得做的还行的话可以给我点个赞、收个藏&#xff0c;这对我真的很重要&#xff01;QWQ 祖传前言 众所周知&#xff0c; Windows11 整了个新的右键菜单 (而原来的右键菜单变成了 显示更多…

基于微信小程序的桥牌计分系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mave…

m基于MATLAB的FM调制收音机仿真实现

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 那么FM调制端的基本原理图如下所示&#xff1a; FM解调 FM解调的基本原理框图为&#xff1a; 在不考虑频偏的情况下&#xff0c;FM解调运算就相当于FM调制的逆运算&#xff0c;任务的第…

二叉树的性质的结点数与高度的计算题

二叉树是一种特殊的树形结构&#xff0c;每个结点最多只有两棵子树&#xff0c;即度最大为2&#xff0c;且二叉树左右子树不能颠倒。 主要常见分类有&#xff1a; 满二叉树&#xff1a; 除了叶子结点外&#xff0c;每个结点的度数都是2&#xff0c;若高度为h&#xff0c;则一…

Redis的5大数据类型

Redis的5大数据类型 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串。 5种数据类型&#xff1a; redis字符串&#xff08;String&#xff09;redis列表&#xff08;List&#xff09;redis集合&#xff08;Set&#xff09;redis哈希表&#xff08;Hash&a…

PMP®|对如何做好项目管理的几点建议

PMP|对如何做好项目管理的几点建议 来自一位从事工程项目管理多年&#xff0c;也接触过软件开发项目的资深人士针对如何做好项目管理泛泛提些建议。 1、明确项目组自身定位。不同公司对项目管理的理解不同&#xff0c;项目制的执行方式不同&#xff0c;项目组在各公司的地位…

使用springboot每日推送早安问候语到用户微信【部署篇】

上一篇介绍文章 上一篇介绍文章 https://blog.csdn.net/weixin_45206218/article/details/127872136代码仓库 代码仓库 https://gitee.com/stevezhaozps/daily-weather前期准备 一台云服务器云服务器安装MySQL8.x云服务器安装jdk8 数据库初始化 由于本项目使用的是springd…

LIVOX HAP激光雷达使用方法

一、Livox HAP介绍 Livox HAP 由 Livox 团队耗时两年精心打造&#xff0c;是 Livox 首款面向智能辅助驾驶市场研发的车规级激光雷达。HAP 于 2021 年在全新自建的车规级智能制造中心进行批量生产&#xff0c;可满足 74 项严苛的车规可靠性要求。HAP 已成功为小鹏汽车、一汽解放…

C#【必备技能篇】Release下的pdb文件有什么用,是否可以删除?

文章目录一、简介二、问答三、Release中删除pdb文件四、重要事项一、简介 英文全称&#xff1a;Program Database File 中文全称&#xff1a;程序数据库 文件 程序数据库 (PDB) 文件保存着调试和项目状态信息&#xff0c;使用这些信息可以对程序的调试配置进行增量链接。 在…

ORCID以及ResearcherID注册

ORCID以及ResearcherID注册 ORCID 网址&#xff1a; https://orcid.org/ 点击注册 开始注册 跟着流程走一遍 最后登录进入个人首页&#xff0c;可以看到自己的ORCID。 ResearcherID 网址&#xff1a;https://webofscience.com 注册 邮箱点击确认邮件后&#xff0c;登录进…

操作系统 | 实验七 SPOOLING技术

文章目录一、实验目的二、实验内容三、数据结构3.1 数据结构3.2 函数以及功能四、程序流程图五、实验代码六、实验结果七、实验体会总结一、实验目的 理解和掌握SPOOLING假脱机技术 二、实验内容 通过SPOOLING技术可将一台物理I/O设备虚拟为多台逻辑I/O设备&#xff0c;同样…

奇技淫巧第7期

终于腾出时间了&#xff0c;现在对3~11月份知识点作总结。 这段时间主要在写论文&#xff0c;跑案例分析。暑期的比赛另写了一个小系列&#xff0c;这里就不再写了。 总的来说&#xff0c;零散的代码知识点在积累几个月后还是要汇总回顾一下的。 文章目录Python 歪门邪道fnmatc…