码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spring——五大类注解和方法注解详解


    文章目录

    • 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
      在这里插入图片描述

    
            
                org.springframework
                spring-context
                5.2.3.RELEASE
            
     
            
                org.springframework
                spring-beans
                5.2.3.RELEASE
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    
    
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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 参数设置
  • 相关阅读:
    创建型模式-原型模式
    【MATLAB】BiGRU神经网络回归预测算法
    遇到线上情况如何定位分析(按下列步骤进行排查,保证有效)
    先有JVM还是先有垃圾回收器?很多人弄混淆了
    面试官:单核 CPU 支持 Java 多线程吗?什么?
    Java备忘录模式剖析及使用场景
    uniapp 上传图片+数据方法
    【语音隐写】基于matlab GUI SVD音频信号数字水印嵌入提取攻击【含Matlab源码 2095期】
    [附源码]Python计算机毕业设计Django基于vue的软件谷公共信息平台
    【深度学习】6-卷积过程中数据的结构变化
  • 原文地址:https://blog.csdn.net/Biteht/article/details/127868085
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号