SpringBoot SpringBoot 原理篇 1 自动配置 1.1 bean 的加载方式【一】

news2025/7/19 4:59:07

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 原理篇

文章目录

      • SpringBoot
      • SpringBoot 原理篇
      • 1 自动配置
        • 1.1 bean 的加载方式【一】
          • 1.1.1 环境准备
          • 1.1.2 第一种方式
          • 1.1.3 第三方bean

1 自动配置

1.1 bean 的加载方式【一】

1.1.1 环境准备

创建一个新的工程模块【Maven 的,不是SpringBoot 的】

在这里插入图片描述

直接创建

在这里插入图片描述

OK,一个全新的Maven 工程

【添加坐标】

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version>
    </dependency>
</dependencies>

在这里插入图片描述

记得刷一下

创建新的bean 类

在这里插入图片描述

再整一套业务层的东西

业务层接口

package com.dingjiaxiong.service;

/**
 * ClassName: BookService
 * date: 2022/10/24 10:34
 *
 * @author DingJiaxiong
 */
public interface BookService {
    
    void check();
}

实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl1 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 1..");
    }
}

复制出三个差不多的实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl2 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 2....");
    }
}
package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl3 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 3......");
    }
}
package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.service.BookService;

/**
 * ClassName: BookServiceImpl1
 * date: 2022/10/24 10:35
 *
 * @author DingJiaxiong
 */


public class BookServiceImpl4 implements BookService {


    @Override
    public void check() {
        System.out.println("book service 4........");
    }
}

在这里插入图片描述

这样儿差不多准备工作就完成了

1.1.2 第一种方式

Spring 刚出现的时候,它提供的最早的bean 的声明方式就是通过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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--  通过xml的方式声明自己开发的bean  -->
    <bean id="cat" class="com.dingjiaxiong.bean.Cat"/>
</beans>

编写程序运行它

package com.dingjiaxiong.app;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * ClassName: App1
 * date: 2022/10/24 10:43
 *
 * @author DingJiaxiong
 */

public class App1 {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext1.xml");
        Object cat = ctx.getBean("cat");
        System.out.println(cat);
    }

}

运行结果

在这里插入图片描述

这就可以说明cat 这个bean 已经初始化成功了

当然定义时其实也可以不用写 id

<!--  不写id  -->
<bean class="com.dingjiaxiong.bean.Dog"/>

在这里插入图片描述

OK,直接拿一下

Dog dog = ctx.getBean(Dog.class);
System.out.println(dog);

运行结果

在这里插入图片描述

OK,没毛病

还有一个小操作,可以一次性到位

String[] names = ctx.getBeanDefinitionNames();
for (String name : names) {
    System.out.println(name);
}

执行结果

在这里插入图片描述

cat 是配置文件中bean的id,下面的狗是一个全路径的类名,后面还跟着一个 #0 ,意思就是编号,如果我有四个

在这里插入图片描述

就是这样

1.1.3 第三方bean

添加一个依赖坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>

在这里插入图片描述

<!--  xml方式声明第三方开发的bean  -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>

同样直接运行

在这里插入图片描述

OK,xml 方式声明bean 差不多就是这样,

回顾一下

  • XML方式声明bean

在这里插入图片描述

这种方式的优点:

  • 全在一个文件中,一目了然

缺点:

  • 写起来麻烦

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

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

相关文章

Go-Excelize API源码阅读(三十四)——RemoveRow

Go-Excelize API源码阅读&#xff08;三十四&#xff09;——RemoveRow 开源摘星计划&#xff08;WeOpen Star&#xff09; 是由腾源会 2022 年推出的全新项目&#xff0c;旨在为开源人提供成长激励&#xff0c;为开源项目提供成长支持&#xff0c;助力开发者更好地了解开源&a…

OpenGL原理与实践——核心模式(五):颜色、基础光照、Phong模型、材质与光

目录 颜色相关理论 什么是颜色 如何计算颜色&#xff1f; 简单实现 Phong光照模型——局部光照模型 环境光 ​编辑 漫反射 镜面反射 材质与光 材质与纹理的关系 材质在shader的体现 材质属性与光属性 光在shader的体现 整体源码实现及渲染结果 关键代码 shade…

软件测试员如何在恶劣的内卷环境下脱颖而出?

内卷&#xff0c;是现在热度非常高的一个词汇&#xff0c;随着热度不断攀升&#xff0c;隐隐到了“万物皆可卷”的程度。 我一个很要好的朋友&#xff0c;现在就读大三&#xff0c;像很多大学生一样面临着能否顺利毕业的压力和考证的焦虑&#xff0c;看着寝室四个人每天都在玩&…

Vue--》混合文件使用以及ref的引用讲解

目录 mixin混合 前言 ref的引用DOM ref引用组件 mixin混合 在日常开发中&#xff0c;当我们开发的各种组件可能会有相同的内容&#xff0c;我们可以将相同的内容在各个相对应的组件内删除&#xff0c;然后放在同一个配置里。所谓混合&#xff1a;两个或多个组件共享一个配…

数据挖掘,在商业智能BI领域的运用

数据挖掘在商业领域&#xff0c;特别是在零售业的运用是比较成功的。由于各业务系统的普遍使用&#xff0c;再加上商业智能BI的可视化分析&#xff0c;企业可以收集到大量关于购买情况的数据&#xff0c;并且数据量在不断激增。利用数据挖掘技术可以为经营管理人员提供正确的决…

Java 集合

目录 一、概念 二、接口 2.1、 集合接口 2.2、 Set 接口 2.2.1 zise方法 2.2.2 isEmpty 方法 2.2.3 contains 方法 2.2.4 Iterator 方法 2.2.5 toArray 方法 2.2.6 add 方法 2.2.7 remove 方法 2.2.8 containsAll 方法 2.2.9 containsAll 方法 2.2.10 ret…

数据仓库基础

文章目录1 数据仓库1.1 数据仓库为何而来1.2 数据仓库主要特征1.2.1 面向主题1.2.2 集成性1.2.3 非易失性1.2.4 时变性1.3 数据仓库、数据库、数据集市1.3.1 OLTP1.3.2 OLAP1.3.3 OLTP和OLAP的对比1.3.4 数据库和数据仓库的区别1.3.5 数据仓库和数据集市的区别1.4 数据仓库分层…

Spring Boot Admin2 自定义异常监控

其他相关文章&#xff1a; Spring Boot Admin 参考指南SpringBoot Admin服务离线、不显示健康信息的问题Spring Boot Admin2 EnableAdminServer的加载Spring Boot Admin2 AdminServerAutoConfiguration详解Spring Boot Admin2 实例状态监控详解Spring Boot Admin2 自定义JVM监控…

Java项目:JSP旅游产品销售管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

Docker-CentOS开启防火墙firewalled映射Docker端口

开启docker的Tomcat容器后&#xff0c;启动 docker run -d -p 8080:8080 tomcat 访问不了Tomcat 查看防火墙所有开放的端口 firewall-cmd --zonepublic --list-ports 一、需要防火墙开启8080 端口 1、通过systemctl status firewalld查看firewalld状态&#xff0c;发现当前…

03.OpenWrt-系统固件烧录

03.OpenWrt-系统固件烧录 3.1 tft软件烧录 tftp是运行在windows的软件,是将windows主机作为服务端,OpenWrt开发板作为客户端,通过tftp协议将数据发送到开发板进行数据升级. 3.1.1 tftp升级的连接方式 tftp烧录有两种连接方式: windows主机通过有线或者无线的方式连接到路由…

IDEA 代码提交前流程及提交日志模板化

前言 在开发大型项目时&#xff0c;通常都是由团队来进行开发。此时&#xff0c;每个人有每个人的代码编写风格和提交习惯&#xff0c;如果放任自由发挥&#xff0c;那么代码质量和代码提交日志就难免风格各异&#xff0c;导致项目代码质量难以保持统一。针对这一问题&#xf…

Flutter高仿微信-第44篇-群聊

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; group_chat_main.dart /*** Author : wangning* Email …

Unity VR 开发教程: Oculus 一体机开发 (一) 环境配置(基于 Oculus Integration v46)

文章目录&#x1f4d5;教程说明&#x1f4d5;安装 Unity 时需要添加的模块&#x1f4d5;设置 Unity 的 Build Settings&#x1f4d5;导入 Oculus Integration&#x1f4d5;设置 Project Settings⭐通用设置⭐Rendering 设置⭐Identification 设置⭐Configuration 设置⭐XR Plug…

信号类型(雷达)——雷达波形认识(一)

系列文章目录 《信号类型&#xff08;雷达通信&#xff09;》 文章目录 前言 简述 总结 前言 本文将结合个人研究经验&#xff0c;从雷达波形简单谈谈我对雷达的认识。之后将对常见的雷达波形进行简单分析。 简述 雷达的波形决定了信号处理的手段以及对应的雷达功能&#x…

关于WEB端实现电子海图研究二GeoServer

记笔记&#xff0c;免忘记&#xff01; 接前面思路篇。本文章主要是讲&#xff0c;利用GeoServer对shp文件进行数据样式调整 &#xff0c;数据拼接&#xff0c;shp文件发布&#xff0c;矢量切片。 Geoserver官网&#xff1a;GeoServer 可以使用最新版本&#xff0c;我使用的…

边缘计算那些事儿--网络切片技术(1)

0 背景 边缘计算可以支持就近的计算卸载&#xff0c;让数据在靠近数据源的设备上处理。对于边缘计算低时延的应用场景来说&#xff0c;网络性能的好坏&#xff0c;直接影响着卸载算法的整体耗时&#xff0c;决定着整个算法模型的可行性。因此如果想实现低时延卸载算法&#xff…

Go语言入门【7】指针

指针 在go语言中&#xff0c;每一个变量在运行时都会拥有一个地址&#xff0c;这个地址代表的就是变量在内存中的位置&#xff0c;而指针就是指向这个地址的变量。使用go语言中的指针很简单&#xff0c;只需要记住两个关键字符&#xff0c;&&#xff08;取地址符&#xff…

[附源码]java毕业设计在线二手车交易信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换

目录1. 发送短信2. GSM电话3. 设置模拟信号强弱4. 设置网速5. 设置网络连接类型前言&#xff1a; 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家&#xff0c;希望有志同道合的小伙伴可以一起交流技术&#xff0c;一起进步~ &#x1f618; 当我们使用模拟器来…