Spring的IoC、Bean、DI的简单实现,难度:※※※

news2025/2/26 19:08:24

目录

场景描述

第一步:初始化Maven项目

第二步:Maven导入Spring包(给代码)

第三步:创建Spring配置文件

第四步 创建Bean

第五步 简单使用Bean (有代码)

第六步 通过依赖注入使用Bean(有配置文件和代码)


场景描述

现在是一个普通的由Maven管理的JAVA项目,创建如图,这里是从头构建,难度一颗星※,很是简单(在了解Maven的基础上)

 (现在的Intellij IDEA已经有Maven的捆绑了,所以直接新建项目就行,但是捆绑的Maven会被墙,下不了Spring包,解决方案如下:)报错:org.mybatis:mybatis:jar:3.5.17 failed to transfer from https://repo.maven.apache.org/maven2-CSDN博客文章浏览阅读139次,点赞7次,收藏4次。原因是maven的官方仓库被墙了,所以需要配置镜像mirror,最简单的解决方法是重写配置文件(不管是使用的Intellij IDEA自带的捆绑的maven还是下载的maven都可以这样解决!2. 配置文件的镜像部分,如果没有settings.xml文件就自己新建一个,有的话就在这上面找到mirrors标签然后改即可(两种方式都提供了)1. 找到Intellij IDEA中的Maven配置:File -> Settings -> (最长的那个选项) -> 构建工具Build。https://blog.csdn.net/violinlove/article/details/145208466?fromshare=blogdetail&sharetype=blogdetail&sharerId=145208466&sharerefer=PC&sharesource=violinlove&sharefrom=from_linkhttps://blog.csdn.net/violinlove/article/details/145208466?fromshare=blogdetail&sharetype=blogdetail&sharerId=145208466&sharerefer=PC&sharesource=violinlove&sharefrom=from_link

第一步:初始化Maven项目

 创建一个小猫小狗一起叫的类,包结构如下:

 以下是全部代码,请根据类名对应文件:

package org.example;



public class Main {
    public static void main(String[] args) {
        AnimalSet animalSet = new AnimalSet();
        animalSet.animalSetSound();
    }
}
package org.example;

import org.example.package1.Animal;
import org.example.package2.Cat;
import org.example.package2.Dog;

public class AnimalSet{
    Animal animal1 = new Cat();
    Animal animal2 = new Dog();

    public void animalSetSound(){
        animal1.sound();
        animal2.sound();
    }
}
package org.example.package2;
import org.example.package1.Animal;

public class Cat implements Animal{
    @Override
    public void sound(){
        System.out.println("cat sound");
    }
}
package org.example.package2;

import org.example.package1.Animal;

public class Dog implements Animal {
    public void sound() {
        System.out.println("dog sound");
    }
}
package org.example.package1;

public interface Animal {
    void sound();
}

第二步:Maven导入Spring包(给代码)

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

第三步:创建Spring配置文件

如果没有找遍列表没有Spring配置文件的话,说明Maven没有导入Spring成功,请看报错:org.mybatis:mybatis:jar:3.5.17 failed to transfer from https://repo.maven.apache.org/maven2-CSDN博客文章浏览阅读140次,点赞7次,收藏4次。原因是maven的官方仓库被墙了,所以需要配置镜像mirror,最简单的解决方法是重写配置文件(不管是使用的Intellij IDEA自带的捆绑的maven还是下载的maven都可以这样解决!2. 配置文件的镜像部分,如果没有settings.xml文件就自己新建一个,有的话就在这上面找到mirrors标签然后改即可(两种方式都提供了)1. 找到Intellij IDEA中的Maven配置:File -> Settings -> (最长的那个选项) -> 构建工具Build。https://blog.csdn.net/violinlove/article/details/145208466https://blog.csdn.net/violinlove/article/details/145208466

 根据上面的内容创建bean标签,配置Spring的IoC的Bean,如果你不知道什么是IoC什么是Bean,请看Spring/SpringBoot的IOC、Bean、DI-CSDN博客

第四步 创建Bean

    <bean id="cat" class="org.example.package2.Cat"/>
    <bean id="dog" class="org.example.package2.Dog"/>

第五步 简单使用Bean (有代码)

可以通过使用Bean的方式然后不需要每次都new对象:(也可以通过配置scope让其每次都new对象,参见专栏中的“Spring的Bean详解=Bean别名+作用范围+使用场景”)

package org.example;

import org.example.package1.Animal;
import org.example.package2.Cat;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SimpleBean {
    public static void main(String[] args) {
        //可以对比一下
        
        Animal catOriginal1 = new Cat();
        Animal catOriginal2 = new Cat();
        System.out.println("catOriginal1" + catOriginal1);
        System.out.println("catOriginal2" + catOriginal2);
        
        ApplicationContext iocContext = new ClassPathXmlApplicationContext("applicationConfig.xml");
        Animal cat1 = (Animal) iocContext.getBean("cat");
        Animal dog1 = (Animal) iocContext.getBean("dog");
        Animal cat2 = (Animal) iocContext.getBean("cat");
        Animal dog2 = (Animal) iocContext.getBean("dog");
        cat1.equals(cat2);
        dog1.equals(dog2);

        System.out.println("cat1 = " + cat1);
        System.out.println("cat2 = " + cat2);

    }
}

第六步 通过依赖注入使用Bean(有配置文件和代码)

Spring的配置文件:

    <bean id="cat" class="org.example.package2.Cat"/>
    <bean id="dog" class="org.example.package2.Dog"/>
    <bean id="animalSet" class="org.example.AnimalSet">
        <property name="animal1" ref="cat"></property>
        <property name="animal2" ref="dog"></property>
    </bean>

 

 这里的animal1或者animal2就和Cat或者Dog类解耦合了!!!咱们只需要在配置文件里面修改,就可以很轻松地改变小动物的类型!!!

 修改Main方法通过IoC容器获取animalSet对象:

package org.example;


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

public class Main {
    public static void main(String[] args) {
        ApplicationContext iocContext = new ClassPathXmlApplicationContext("applicationConfig.xml");
        AnimalSet animalSet = (AnimalSet) iocContext.getBean("animalSet");
        System.out.println(animalSet);
        animalSet.animalSetSound();

    }
}
package org.example;

import org.example.package1.Animal;

public class AnimalSet{
    Animal animal1;
    Animal animal2;

    public void animalSetSound(){
        animal1.sound();
        animal2.sound();
    }

    public void setAnimal1(Animal animal1) {
        this.animal1 = animal1;
    }
    public void setAnimal2(Animal animal2) {
        this.animal2 = animal2;
    }

}

 例如配置文件改成:

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

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

相关文章

Tensor 基本操作1 | PyTorch 深度学习实战

目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginner/basics/tensorqs_tutorial.html 常用操作 unsqueeze 将多维数组解套&#xf…

自然语言处理——自注意力机制

一、文字表示方法 在自然语言处理中&#xff0c;如何用数据表示文字是基础问题。独热编码&#xff08;One-hot Encoding &#xff09;是一种简单的方法&#xff0c;例如对于 “我”“你”“他”“猫”“狗” 等字&#xff0c;会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …

嵌入式硬件篇---PID控制

文章目录 前言第一部分&#xff1a;连续PID1.比例&#xff08;Proportional&#xff0c;P&#xff09;控制2.积分&#xff08;Integral&#xff0c;I&#xff09;控制3.微分&#xff08;Derivative&#xff0c;D&#xff09;控制4.PID的工作原理5..实质6.分析7.各种PID控制器P控…

学成在线_内容管理模块_创建模块工程

学成在线模块工程 1.各个微服务依赖基础工程2.每个微服务都是一个前后端分离的项目3.xuecheng-plus-content&#xff1a;内容管理模块工程xuecheng-plus-content-modelxuecheng-plus-content-servicexuecheng-plus-content-api 1.各个微服务依赖基础工程 2.每个微服务都是一个前…

免费送源码:Java+ssm+MySQL Springboot卫生院儿童预防接种系统 计算机毕业设计原创定制

摘 要 儿童预防接种工作实行网络信息化管理&#xff0c;是我国预防规划工作发展的需要。接种信息实行网络信息化不仅是预防接种工作步入了一个新的台阶&#xff0c;更重要的是解决了多年接种疫苗过程种&#xff0c;预防接种剂次不清&#xff0c;难以全程有效接种的问题&#x…

OSPF的LSA的学习研究

OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图&#xff0c;按照地址表配置&#xff0c;激活OSPF划分相关区域并宣告相关网段 2、1类LSA&#xff0c;每台运行了OSPF的路由器都会产生&#xff0c;描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa&#xff0…

JAVA:MyBatis 缓存机制详解的技术指南

1、简述 MyBatis是Java开发中常用的持久层框架之一&#xff0c;通过面向对象的方式操作数据库。为了提高系统性能&#xff0c;MyBatis提供了两级缓存机制&#xff1a;一级缓存&#xff08;本地缓存&#xff09;和二级缓存&#xff08;全局缓存&#xff09;。本文将详细讲解MyB…

前后端分离的Java快速开发平台

采用SpringBoot3.x、Shiro、MyBatis-Plus、Vue3、TypeScript、Element Plus、Vue Router、Pinia、Axios、Vite框架&#xff0c;开发的一套权限系统&#xff0c;极低门槛&#xff0c;拿来即用。设计之初&#xff0c;就非常注重安全性&#xff0c;为企业系统保驾护航&#xff0c;…

数据结构:栈和队列详解(上)

一.栈 1.概念与结构&#xff1a; 栈&#xff1a;一种特殊的线性表&#xff0c;只允许在顺序表的一段插入和删除数据&#xff0c;进行插入和删除的一端叫做栈顶&#xff0c;另外一端则叫做栈底&#xff0c;而我们将在栈顶插入数据叫做压栈&#xff08;入栈或进栈&#xff09;&a…

初识go语言之指针用法

一、环境准备 安装go语言编译环境&#xff0c;官网地址&#xff1a;https://go.dev/dl/ 或者 https://golang.google.cn/dl/ 点击下载按提示安装即可 vscode 安装go语言扩展 测试 package mainimport "fmt"func main() {fmt.Println("Hello, World!") …

python(25) : 含有大模型生成的公式的文本渲染成图片并生成word文档(支持flask接口调用)

公式样例 渲染前 \[\sqrt{1904.615384} \approx 43.64\] 渲染后 安装依赖 pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/ requestspip install sympy -i https://mirrors.aliyun.com/pypi/simple/ requestspip install python-docx -i https://mirro…

国产文本编辑器EverEdit - 恢复最近的选区

1 恢复最近的选区 1.1 应用场景 如果用户选择了一些文本&#xff0c;特别是多选区选择&#xff0c;在选择的过程中出现失误&#xff0c;导致选区丢失&#xff0c;一般的做法是骂骂咧咧再选一次&#xff0c;使用EverEdit就没有这个烦恼&#xff0c;EverEdit内置了恢复最近的选区…

54,【4】BUUCTF WEB GYCTF2020Ezsqli

进入靶场 吓我一跳&#xff0c;但凡放个彭于晏我都不说啥了 提交个1看看 1 and 11 1# 还尝试了很多&#xff0c;不过都被过滤了&#xff0c;头疼 看看别人的WP 竟然要写代码去跑&#xff01;&#xff01;&#xff01;&#xff0c;不会啊&#xff0c;先用别人的代码吧&#xf…

【unity进阶篇】unity如何实现跨平台及unity最优最小包体打包方式(.NET、Mono和IL2CPP知识介绍)

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日&#xff0c;国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》&#xff0c;报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…

联想装系统后触摸板无法设置双指手势

我的一个电脑是联想小新air13&#xff0c;装Windows10系统后&#xff0c;没有找到设置触摸板手势的地方 也没有“装置设定值” 这个选项 经查询&#xff0c;需要去联想网站搜索驱动&#xff0c;下载了一个“Lenovo联想驱动管理” &#xff0c;更新了下触摸板驱动&#xff0c; …

ue5 制作,播放,停止动画蒙太奇

右键&#xff0c;动画蒙太奇 新建插槽 把默认插槽选择为&#xff0c;自己新建的插槽 然后拖一个动画进去 input换成玩家0 就可以接收键盘事件 pawn 自动控制玩家换成玩家0 找到动画蓝图 把它化成我们那边蒙太奇里面的槽 第三步&#xff1a;第三人称角色蓝图 按下F…

一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建

文章目录 一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建1. 先回忆webpack是个啥2. webpack四大核心2.1 Entry(入口)2.2 Output(输出)2.3 Loader(加载器)2.4 Plugin(插件) 3. 按部就班实现webpack3.1 初始化项目3.2 完成项目骨架搭建3.3 实现webpack构建 一文…

迁移学习-详解

一、fasttext工具介绍 1 fasttext介绍 1.1 fasttext作用 作为NLP工程领域常用的工具包, fasttext有两大作用: 进行文本分类 训练词向量 1.2 fasttext工具包的优势 正如它的名字, 在保持较高精度的情况下, 快速的进行训练和预测是fasttext的最大优势. fasttext优势的原因:…

Mac 删除ABC 输入法

参考链接&#xff1a;百度安全验证 Mac下删除系统自带输入法ABC&#xff0c;正解&#xff01;_mac删除abc输入法-CSDN博客 ABC 输入法和搜狗输入法等 英文有冲突~~ 切换后还会在英文状态&#xff0c;可以删除 &#xff1b;可能会对DNS 输入有影响&#xff0c;但是可以通过复…