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

ops/2025/1/20 7:17:55/

目录

场景描述

第一步:初始化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项目

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

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

java">package org.example;public class Main {public static void main(String[] args) {AnimalSet animalSet = new AnimalSet();animalSet.animalSetSound();}
}
java">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();}
}
java">package org.example.package2;
import org.example.package1.Animal;public class Cat implements Animal{@Overridepublic void sound(){System.out.println("cat sound");}
}
java">package org.example.package2;import org.example.package1.Animal;public class Dog implements Animal {public void sound() {System.out.println("dog sound");}
}
java">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别名+作用范围+使用场景”)

java">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对象:

java">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();}
}
java">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.ppmy.cn/ops/151606.html

相关文章

RocketMQ中的一些细节

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》&#xff0c;我本人觉得这个作者还是不错&#xff0c;都是从场景来进行分析&#xff0c;感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…

Web第一次作业

目录 题目 html代码 index login register css代码 base index login register 效果展示 index login register 题目 实现一个登录页面、实现一个注册页面&#xff1b;实现一个主页 - 登录页面&#xff1a;login.html - 注册页面&#xff1a;register.html - 主页…

Spring 连问夺魂

1、说说Spring里用了哪些设计模式? 单例模式&#xff1a;Spring 中的 Bean 默认情况下都是单例的。无需多说。 工厂模式&#xff1a;工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。 代理模式&#xff1a;最常见的 AOP 的实现方式就是通过代理来…

第6章:Python TDD实例变量私有化探索

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…

医院挂号就诊系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&#…

多租户支持与企业级应用场景:ShardingSphere 的应用解析

随着企业业务的多样化和复杂性增加&#xff0c;多租户架构成为支持多个独立用户或租户在同一系统上高效、安全地运行的关键方案。ShardingSphere 提供了强大的多租户支持&#xff0c;使得在分布式数据库环境下&#xff0c;多个租户可以共享资源&#xff0c;同时保证数据隔离与安…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)

用户在前端页面登录成功后会从服务端获取Token&#xff0c;后续调用服务器的服务接口时都得带着Token&#xff0c;否则就会验证失败。之前使用postman测试的时候&#xff0c;获取Token后再调用其它服务都是人工将Token添加到Header中&#xff0c;网页中没法这么做&#xff0c;只…

QT的TCP通讯

目录 一、引言 二、QT 中与 TCP 通讯相关的类 1.QTcpSocket 类 1.1 常用信号 1.2常用函数 2.QTcpServer类 2.1常用函数 三、QT TCP通信的详细代码实现 1.TCP服务器端实现 2.TCP客户端实现 四、总结 一、引言 在网络编程领域&#xff0c;TCP&#xff08;Transmission…