码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java框架-Spring-IOC


    文章目录

    • 一、组件注册
      • 包扫描+组件注解
        • 0)、 @ComponentScans
        • 1)、 @RestController
        • 2)、 @Srevice
        • 3)、 @Rerpository
        • 4)、@Component
      • 导入第三方包里的组件
        • 1)、@Configuration
        • 1)、@Bean
        • 1)、@Conditional(自定义条件类)
      • @Import 快速给容器导入一个组件
        • 1)、@Import
        • 2)、interface ImportSelector
        • 3)、ImportBeanDefinitionRegistrar
      • 使用Spring提供的 FactoryBean
        • 1)、interface FactoryBean
    • 二、Bean生命周期
      • 创建
      • 初始化
      • 销毁
      • 1)、相关注解和接口
        • 1、指定初始化和销毁方法
        • 2、实现初始化和销毁接口
        • 3、JSR250
        • 4、Bean后置处理器:BeanPostProcessor
      • 2)、 Springd底层对BeanPostProcessor的使用
    • 三、属性赋值
        • @PropertySource
        • @Value
    • 四、自动装配
        • 1)、 @Autowired
          • @Qualifier:指定需要装配的bean id
          • @Primary:优先装配该Bean
          • 构造器、方法、属性同样支持,都是从容器中获取对应的Bean
        • 2)、@Resource(JSR250规范)
        • 3)、@Ingect(JSR330)
        • 4)、xxxAware:把Spring底层组件自动注册到Bean中
        • 5)、@Profile:根据环境配置给容器中注册组件

    在这里插入图片描述

    Spring官方文档
    学习参考视频

    一、组件注册

    包扫描+组件注解

    0)、 @ComponentScans

    • @ComponentScan
    • @ Filter

    1)、 @RestController

    • @ResponseBody
    • @Controller

    2)、 @Srevice

    3)、 @Rerpository

    4)、@Component

    导入第三方包里的组件

    1)、@Configuration

    1)、@Bean

    • @Scope:prototype、singleton、request、session
    • @Lazy

    1)、@Conditional(自定义条件类)

    @Import 快速给容器导入一个组件

    1)、@Import

    2)、interface ImportSelector

    3)、ImportBeanDefinitionRegistrar

    使用Spring提供的 FactoryBean

    1)、interface FactoryBean

    • 默认获取工厂bean调用getObject
    • 要获取工厂bean本身,需要在id前添加&

    二、Bean生命周期

    创建

    • 单例模式:容器初始化
    • 多礼模式:从容器中获取实例

    初始化

    • 对象创建完成,并赋值好属性之后

    销毁

    • 单实例:容器关闭的时候
    • 多实例:容器不会管理这个Bean,需要自己手动调用

    1)、相关注解和接口

    1、指定初始化和销毁方法

    • @Bean(initMethod=xxx, destroyMethod=xxx)

    2、实现初始化和销毁接口

    • interface InitializingBean
    • interface DisposableBean

    3、JSR250

    • @PostConstruct
    • @PreDestroy

    4、Bean后置处理器:BeanPostProcessor

    • interface BeanPostProcessor
    • Bean初始化前执行postProcessBeforeInitialization,初始化后执行postProcessAfterInitialization
    • 整个在Bean赋值完成之后
    • ApplicationContextAware接口注入ApplicationContext的实现就是该处理器完成

    2)、 Springd底层对BeanPostProcessor的使用

    • Bean赋值
    • 注入其他组件
    • @Autowired
    • 生命周期功能:注解、接口

    三、属性赋值

    @PropertySource

    @Value

    • 基本数值
    • SpEL:#{}
    • ${},取出配置【yaml、properties】文件中的值,需要先加载配置文件到环境中

    四、自动装配

    1)、 @Autowired

    • 默认优先从容器中获取对应组件
    • 如果容器中存在多个相同类型Bean,根据名称注入Bean
    • required:true:必须,false:非必须
    • 由【AutowiredAnnotationBeanPostProcessor】处理器实现
    @Qualifier:指定需要装配的bean id
    • 配合@Autowired使用
    @Primary:优先装配该Bean
    • 配合@Bean使用
    构造器、方法、属性同样支持,都是从容器中获取对应的Bean
    • 标在构造器上:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是默认从容器中装配
    • 标在属性上,setf方法上
    • 标在方法:@Bean+方法参数,参数从容器中获取

    2)、@Resource(JSR250规范)

    • 默认按照组件名称装配
    • 不支持required

    3)、@Ingect(JSR330)

    • 需要引入pom依赖
    • 不支持required

    4)、xxxAware:把Spring底层组件自动注册到Bean中

    • interface ApplicationContextAware
    • interface BeanNameAware
    • interface EmbeddedValueResolverAware

    5)、@Profile:根据环境配置给容器中注册组件

    • Dspring.profile.cative=test(test为环境变量)
    • 代码方式,容器启动前设置号参数
      1、 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
      2、 annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“test”);
      3、 annotationConfigApplicationContext.register(componentClasses);
      4、 annotationConfigApplicationContext.refresh();
    • 可以添加在方法上,也可以添加在类上
  • 相关阅读:
    JAVA生成20位LONG型UUID
    QT 第五天 TCP通信与数据库
    【深度学习】之 卷积神经网络(CNN)概念 简析:名词介绍 || 为何要用卷积? || 卷积 || 激活函数 || 池化层 || 全连接层 || CNN的优点
    Ubuntu22.04 install Kafka
    分析解读NCCL_SHM_Disable与NCCL_P2P_Disable
    QT基础功能,信号、槽
    并发之固定运行和交替运行方案
    【数据库内核分析系列】:数据库表的创建过程
    计算机毕业设计选题推荐-springboot 小说阅读平台
    怎么让NetCore接口支持Json参数
  • 原文地址:https://blog.csdn.net/Semanteme/article/details/133031761
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号