首页 > 其他分享 >[spring] spring学习笔记(1): 通过xml实现依赖注入(1)

[spring] spring学习笔记(1): 通过xml实现依赖注入(1)

时间:2024-01-16 11:56:28浏览次数:26  
标签:xml spring Weapon 笔记 Player attack public

依赖注入是spring框架中一个重要思想 - Inversion of Control(IoC) - 的实现, 大体上来说, 就是通过配置Bean对象, 让spring内置的方法来为主对象创建需要的依赖对象; 打个比方, 在java中, 当我们想要使用某个类时, 应当通过new关键字来指定, i.e.

// 在这里创建一个类, 他需要使用另一个类的方法
public class Player {
    public void attack(){
        //创建一把剑, 使用new
        Weapon sword = new Weapon();
        //调用方法得到攻击力
        num_attack = sword.getAttack();
        System.out.println("Player@kapiBara deals " + num_attack + " damage!");
    }
}

可以看到我们使用new方法创建了一个weapon对象, 并把它给Player对象使用
然而通过spring, 我们可以通过3种方法和xml实现依赖注入, 所以接下来要修改这个类⬆️

用来测试的主函数

在此之前, 先来写一个测试用函数testAttack, 因为主函数的结构差不多; 利用xml注入依赖需要ApplicationContext的帮忙

public class Test {
    public static void main(String[] args) {
        //1.初始化Spring容器,按路径加载配置文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        //2.通过容器获取实例对象,getBean()方法中的参数是bean标签中的id
        Player p1 = (Player) applicationContext.getBean("player");
        //3.调用实例中的方法
        p1.attack();
    }
}

setter(常用): 使用<property>, name和ref

xml文件怎么写?(只有bean定义部分)

<!-- bean definitions here -->
<!--将指定类都配置给Spring,让Spring创建其对象的实例,一个bean对应一个对象-->
<bean id="weapon" class="com.demo.Weapon"></bean>

<bean id="player" class="com.demo.player">
	<!--通过setter注入-->
	<property name="weapon" ref="weapon"></property>
</bean>

对应的Player类

public class Player {
    //引入参数
    private Weapon w;
    //创建setter方法
    public void setWeapon(Weapon w) {
        this.w = w;
    }

    public void attack(){
        //调用方法
        num_attack = w.getAttack();
        System.out.println("Player@kapiBara deals " + num_attack + " damage!");
    }
}

构造器(常用)

xml文件怎么写?(只有bean定义部分)

<!-- bean definitions here -->
<!--将指定类都配置给Spring,让Spring创建其对象的实例,一个bean对应一个对象-->
<bean id="weapon" class="com.demo.weapon"></bean>

<bean id="player" class="com.demo.Player">
	<!--通过构造函数注入,ref属性表示注入另一个对象-->
	<constructor-arg ref="weapon"></constructor-arg>
</bean>

对应的Player类

public class Player {
    //引入参数
    private Weapon w;
    //创建有参构造函数
    public Player(Weapon w) {
        this.w = w;
    }

    public void attack(){
        //调用方法
        num_attack = w.getAttack();
        System.out.println("Player@kapiBara deals " + num_attack + " damage!");
    }
}

接口注入(不常用)

结论

运行之后结果都是一样的, 但是我们的重点来到了xml配置文件上, 而不用在主体类(Player)里用new来创建引用对象了; 如果Weapon类发生了变化, 那么只要修改xml文件的配置就行了

标签:xml,spring,Weapon,笔记,Player,attack,public
From: https://www.cnblogs.com/Akira300000/p/17965037

相关文章

  • Spring 工具:DigestUtils md5 摘要工具
    工具类:org.springframework.util.DigestUtils作用:计算字节数组、输入流的md5摘要所在模块:spring-core方法描述Stringmd5DigestAsHex(byte[]bytes)返回字节数组的md5摘要(计算字符串)Stringmd5DigestAsHex(InputStreaminputStream)返回输入流的md5......
  • Spring 工具:StopWatch 计时器
    工具类:org.springframework.util.StopWatch作用:记录方法执行耗时,统计每个方法的耗时占比所在模块:spring-core方法描述voidstart(StringtaskName)开始一个新的监测任务,可设置任务名称。记录当前时间和任务名称voidstop()结束当前监测任务。记录任务执行......
  • 聊聊如何实现动态加载spring拦截器
    前言之前写过一篇文章聊聊如何实现热插拔AOP,今天我们继续整一个类似的话题,聊聊如何实现spring拦截器的动态加载实现核心思路groovy热加载java+事件监听变更拦截器实现步骤1、在项目的pom引入groovyGAV<dependency><groupId>org.codehaus.groovy</groupI......
  • SpringBoot自定义注解实现操作日志记录
    1、增加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>${spring-version}</version>......
  • PVE群晖NAS修复笔记
    title:PVE群晖NAS修复笔记tags:[NAS,家宽,docker,docker-compose,linux,pve]新版原文:https://query.carlzeng.top:3/appsearch?q=PVE群晖NAS修复笔记版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA许可协议。转载请注明出处!date:2023-12-2908:51:31categories:......
  • Spring整合junit 5
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache......
  • Python第四天学习笔记
    Python的用户交互input('请插入vip卡')input('输入密码')请插入vip卡23333输入密码6666'6666'print('*'*100)****************************************************************************************************print('*'......
  • 为什么很多公司 SpringBoot 项目禁止使用 Tomcat
    为什么很多公司SpringBoot项目禁止使用Tomcat学习改变命运,技术铸就辉煌。大家好,我是銘,全栈开发程序员。前言在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用......
  • maven项目关于target目录没有生成xml文件的解决方案
    1.这是我的项目目录结构2.在我通过maven的install后,target目录中并没有xml文件解决方案:1.在maven的pom文件中添加2.再通过maven的install后,target目录中出现xml文件......
  • JAVA学习笔记 - Day3
    IDEA优化Bilibili:https://www.bilibili.com/video/BV1664y1U73u/?spm_id_from=333.337.search-card.all.click&vd_source=1939d858b6429ddf9c340541a096299d大小写联想,不区分大小写。勾选掉/显示注释(时间可调)自动导包,选择"always"选择JDK版本及编译输出配......