Spring专家课程Day01_Spring-IOC

news2024/11/17 10:47:52

文章目录

  • 基础配置
    • 1)基础文件结构(Maven项目创建)
  • 一、01_Spring概述_IOC_HelloWorld
    • 1.Spring框架的两个核心功能
      • 1.1) IOC/DI ,控制反转依赖注入!
      • 1.2) AOP,面向切面编程
    • 2.IOC的两种模式
      • 2.1)配置文件中配置 @Bean
      • 2.2)配置文件,组件扫描注解+类注解@Component
  • 二、02_JavaBean_JUnit_组件扫描
    • 1.JavaBean的概念
    • 2.Junit的引入
      • 2.1) junit的@Before 和 @After注解
    • 3.组件扫描功能@ComponentScan
    • 4.Spring提供的多种注解
    • 5.自定义组件ID
  • 三、03_作用域_Bean生命周期管理
    • 1.基于javax.annotation包的注解
      • 1.1 @PostContruct
      • 1.2 @PreDestroy : 对象销毁时自动执行的注解
      • 1.3 示例
    • 2.基于Spring的@Bean自带注解
      • 2.1 @Bean(intitMethod="open" ,destroyMethod = "close")
      • 2.2 示例代码
    • 3 @Scope("prototype")的特殊情况
  • 四、 04_懒惰初始化_@Import
    • 4.1 @Lazy 可以和@Component配合
    • 4.2 @Lazy 可以和@Bean配合
    • 4.3 @import 多人开发,多配置文件合并
  • 总结:
    • 1.[MVN地址](https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2)

基础配置

1)基础文件结构(Maven项目创建)

在这里插入图片描述

一、01_Spring概述_IOC_HelloWorld

1.Spring框架的两个核心功能

1.1) IOC/DI ,控制反转依赖注入!

在这里插入图片描述

1.2) AOP,面向切面编程

2.IOC的两种模式

2.1)配置文件中配置 @Bean

在这里插入图片描述

2.2)配置文件,组件扫描注解+类注解@Component

参考二里面的明细3

二、02_JavaBean_JUnit_组件扫描

1.JavaBean的概念

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

2.Junit的引入

2.1) junit的@Before 和 @After注解

public class TestCase {

    AnnotationConfigApplicationContext ctx;

    @Before
    public void init(){
        ctx = new AnnotationConfigApplicationContext(Config.class);
        System.out.println("初始化Spring");
    }

    @After
    public void destroy(){
        ctx.close();
        System.out.println("销毁Spring");
    }

    @Test
    public void testScope(){
       Date d= ctx.getBean("myDate", Date.class);
        System.out.println(d);
    } 
}

3.组件扫描功能@ComponentScan

在这里插入图片描述

4.Spring提供的多种注解

在这里插入图片描述

5.自定义组件ID

实际中很少这么做,会增加出错率
在这里插入图片描述

三、03_作用域_Bean生命周期管理

生命周期管理是否需要使用,根据具体业务需求而定;

1.基于javax.annotation包的注解

注意:因为以下注解不属于Spring,属于annotation,所以要单独引入

1.1 @PostContruct

	创建对象以后自动执行

1.2 @PreDestroy : 对象销毁时自动执行的注解

   关闭容器关闭对象时候执行

1.3 示例

组件代码:

@Component
public class FileLogger03 {

    public PrintWriter out;

    @PostConstruct
    //Spring创建Bean对象后自动执行初始化方法
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("打开Demo.text");
    }

    @PreDestroy
    //Spring 容器关闭时销毁对象,自动执行销毁方法
    public void close() {
        out.close();
        System.out.println("关闭Demo.text");
    }
}

配置类代码:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")

public class Config { 

}

测试类代码:

public class TestCase {

    AnnotationConfigApplicationContext ctx;

    @Before
    public void init(){
        ctx = new AnnotationConfigApplicationContext(Config.class);
    }

    @After
    public void destroy(){
        ctx.close();
    } 

    @Test
    public void testScope(){
        FileLogger03 ff= ctx.getBean("fileLogger03",FileLogger03.class);
        ff.out.println("aaaaaaa");
        ff.out.println("ddddddd");
        System.out.println("life test");
    } 
}

2.基于Spring的@Bean自带注解

2.1 @Bean(intitMethod=“open” ,destroyMethod = “close”)

2.2 示例代码

组件代码:

//配置类采用了@Bean ,所以此处不用再@Component 
public class DemoLogger {

    public PrintWriter out;
  
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("打开Demo.text");
    }
  
    public void close() {
        out.close();
        System.out.println("关闭Demo.text");
    }
}

配置类:

@Configuration
//因为是采用@Bean标注,所以@ComponentScan可以省略
public class Config {  
    
    @Bean(initMethod = "open",destroyMethod = "close")
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }
    
}

测试类:

    @Test
    public void testLogger(){
        DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
        gl.out.println("good morning!");
    }

3 @Scope(“prototype”)的特殊情况

每次都创建一个对象,Spring为了避免内存泄漏,不会缓存对象的引用,所以Spring关闭时候就无法处理对象的销毁方法,需要手动销毁.
配置类:

    @Bean(initMethod = "open",destroyMethod = "close")
    @Scope("prototype")
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }

测试类:

    @Test
    public void testLogger(){
        DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
        gl.out.println("good morning!");
        gl.close(); //因为开启了  @Scope("prototype"),此处需要手动关闭
    }

四、 04_懒惰初始化_@Import

4.1 @Lazy 可以和@Component配合

前提组件有@Component,会自动创建;不想创建的话就是加上@Lazy

@Component
@Lazy
public class FileLogger03 {

    public PrintWriter out;

    @PostConstruct
    //Spring创建Bean对象后自动执行初始化方法
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("111打开Demo.text");
    }

    @PreDestroy
    //Spring 容器关闭时销毁对象,自动执行销毁方法
    public void close() {
        out.close();
        System.out.println("111关闭Demo.text");
    }
}

4.2 @Lazy 可以和@Bean配合

配置中

   @Bean
   @Lazy
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }

4.3 @import 多人开发,多配置文件合并

在这里插入图片描述

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@Import({SysConfig.class})
public class Config {

}

总结:

1.MVN地址

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

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

相关文章

数睿通2.0功能发布—集成Doris、数仓动态配置、质量任务完善、接入速度优化

文章目录 引言集成 Doris数仓动态配置质量任务完善接入速度优化结语 引言 数睿通 2.0 数据中台迎来了 6 月份的更新,本次更新集成了 Doris 数据库,可用于数据集成,数据开发等模块。过去数仓使用的是 TiDB,新版本可以根据自身需求…

记一次移动九联UNT401H电视盒子免拆刷机(图文详细教程 附所有软件)

文章目录 1.准备1.硬件介绍2.刷机硬件3.相关软件1.刷机软件2.工具软件 2.刷机1.开启adb2.查看IP地址3.写入recovery4.刷入系统 3.系统使用1.首次启动2.安装第三方软件安装blibili tv看IPTV 4.总结附: 声明:本安卓固件,仅供内部测试和技术交流…

vue element UI在button按钮使用 @keyup.enter不生效

如图所示,没效果。在按钮上绑定keyup事件,加上.native覆盖原有封装的keyup事件 解决办法 created () {document.onkeyup e > {if (e.keyCode 13 && e.target.baseURI.match(/login/)) {// 调用登录 验证方法this.submitForm()}}}成功解决&…

Java 使用hutool工具进行导出excel表格(代码很简单)

1.先引入hutool的相关依赖 <!--hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.4</version></dependency><dependency><groupId>org.apache.poi</…

【youcans动手学模型】SqueezeNet 模型-CIFAR10图像分类

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】SqueezeNet 模型-CIFAR10图像分类 1. SqueezeNet 卷积神经网络模型1.1 模型简介1.2 论文介绍1.3 分析与讨论 2. 在 PyTorch 中定义 SqueezeNet 模型类2.1 定义 Fire Module2.2 …

少有人告诉你!工科硕士对应届生的肺腑之言!

自己是电子信息工科硕士狗一枚&#xff0c;自认为毕业于985院校还可以。刚毕业时&#xff0c;去了一家世界500强公司&#xff0c;校招签约时只说是“技术岗”&#xff0c;没有指定具体岗位。等待毕业的时间里&#xff0c;对新公司、新岗位充满了无限的期待&#xff0c;认为自己…

5、R语言所需安装包安装教程

一、R包安装 1.鼠标右键&#xff0c;以管理员的身份运行&#xff0c;然后点击确定。 2.点击安装导向中的下一步。 3.修改安装路径&#xff0c;安装到自己所需的路径&#xff0c;然后点击下一步。 4.勾选自己所需组件&#xff0c;然后点击下一步。 5.启动选项&#xff0c;选…

百万奖金悬赏大模型不擅长的任务!这 11 个任务模型越大,效果越差!

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 去年咱们在介绍百万悬赏时提到&#xff0c;“海量资源砸出的大模型真的会一直那么香吗&#xff1f;”&#xff0c;目前来看&#xff0c;自打 ChatGPT 横空出世引领一众大模型开辟新的生活和工作方式以来&#xff0c;还是挺香的…

vue — 高德地图实现来回切换卫星图

默认初始化地图展示标准3d地图&#xff08;这里添加蒙层&#xff09; initMap () {this.mapObj new AMap.Map(mapContainer, {features: [bg, road, point, building],showLabel: true,rotateEnable: false,pitchEnable: false,zoom: 17,pitch: 65,rotation: 45,viewMode: 3D,…

一起学SF框架系列4.8-模块context-事件机制(Event)

ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口提供的。如果将实现ApplicationListener接口的bean部署到上下文中&#xff0c;则每次将ApplicationEvent发布到ApplicationContext时&#xff0c;都会通知该bean。从本质上讲&#xff0c;这是…

Allegro如何使用打印预览功能操作指导

Allegro如何使用打印预览功能操作指导 Allegro时常需要使用打印功能,将某个视图打印成pdf文件,如下图 在打印成pdf文件之前,可以使用打印预览的功能,具体操作如下 点击shape Add Rect命令Options出现如下选项<

阿里云地域和可用区分布表

阿里云服务器地域和可用区有哪些&#xff1f;阿里云服务器地域节点遍布全球29个地域、88个可用区&#xff0c;包括中国大陆、中国香港、日本、美国、新加坡、孟买、泰国、首尔、迪拜等地域&#xff0c;同一个地域下有多个可用区可以选择&#xff0c;阿里云服务器网分享2023新版…

Nginx的Location和Rewrite

目录 Rewrite简介 1.0 Rewrite实际场景 1.1 Rewrite跳转场景 1.2 Rewrite跳转实现 1.3 Nginx正则表达式 1.4 Rewrite命令&&语法格式 1.5 flag标记说明 2 Location分类 2.1 Location优先级 3 Rewrite&&Location比较 4 场景跳转实验 4.1 基于域名的跳转 …

vcruntime140.dll无法继续执行代码怎么办

今天打开photoshop软件的时候&#xff0c;突然间就打不开&#xff0c;电脑报错由于找不到vcruntime140.dll&#xff0c;无法继续执行此代码&#xff0c;然后我就把photoshop卸载了&#xff0c;再重新安装&#xff0c;依然还是报错。这个可怎么办&#xff1f;vcruntime140.dll如…

【笔记】肥胖代码:减肥的秘密

直接原因与根本原因 直接原因与根本原因的区别是什么&#xff1f;直接原因是直接造成体重增加的原因&#xff0c;根本原因是导致事物发生变化的根源。 以酗酒为例。酗酒的原因是什么&#xff1f; 直接原因是饮酒过量。这是不可否认的事&#xff0c;但显然不能解决问题。直接…

佑友防火墙默认口令及RCE漏洞

先用fofa脚本爬取所有碧海威相关资产&#xff08;fofa脚本下载地址&#xff1a;&#xff09; python3 fofa-cwillchris.py -k title"佑友防火墙" 将上面爬取到的文件&#xff08;一般是final****.txt&#xff09;移动到脚本目录下&#xff0c;保存为1.txt ./佑友防…

浅谈智能安全用电系统在轨道交通中的应用

安科瑞 华楠 摘要&#xff1a; 随着轨道交通电气设备的增加和用电负荷的变大&#xff0c;用电安全问题愈发突出&#xff0c;而对电力状况在线监测和故障预警是实现安全用电的关键。本文研究了轨道交通安全用电智能监测系统。该系统通过电力载波技术可利用原电缆进行数据传输&am…

适用ddddocr自动化测试验证码识别

原打算使用tesseract进行验证码识别的但后面发现实在太辣鸡了 不知道tesseract以及没安装的可以看这篇文章&#xff1a; tesseract安装以及联调python 使用tesseract的代码&#xff1a; import pytesseract from PIL import Image, ImageEnhance """ 步骤①&…

DOTA大环配体化合物:DOTA PEG5 amine/azide/DBCO,特点分享说明

一、DOTA-PEG5-amine&#xff0c;DOTA PEG5 NH2&#xff0c;DOTA-PEG5-amine HCl salt&#xff0c;DOTA五聚乙二醇氨基Product structure&#xff1a; 1.CAS No&#xff1a;N/A 2.Molecular formula&#xff1a;C28H54N6O12 3.Molecular weight&#xff1a;666.8 5.Appearance …

【图像处理】去雾代码收(附halcon、python、C#、VB、matlab)

【图像处理】去雾代码收&#xff08;附halcon、python、C#、VB、matlab&#xff09; 一、halcon算法1.1 halcon算法源码1.2 halcon算法效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/8ad5217a59be4de29b5a7b6eee997b85.png#pic_center) 二、opencv算法2.1 python源…