文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring bean需要依赖注入的原因是什么

2023-06-20 16:19

关注

这篇文章主要介绍“Spring bean需要依赖注入的原因是什么”,在日常操作中,相信很多人在Spring bean需要依赖注入的原因是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring bean需要依赖注入的原因是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录

具体步骤:

创建一个maven项目 spring-day1-constructor

导入依赖

<properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <!--这里是java 版本号-->        <maven.compiler.source>11</maven.compiler.source>        <maven.compiler.target>11</maven.compiler.target>        <!--这里是方便版本控制-->        <spring.version>5.3.1</spring.version>        <lombok.version>1.18.20</lombok.version>        <junit.version>4.12</junit.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <version>${lombok.version}</version>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>${junit.version}</version>        </dependency>    </dependencies>

工程项目结构

Spring bean需要依赖注入的原因是什么

样例1:

创建一个Student类

public class Student {    private Long number;    private String name;    private String school;    public void setNumber(Long number) {        this.number = number;    }    public void setName(String name) {        this.name = name;    }    public void setSchool(String school) {        this.school = school;    }    public Student() {    }    public Student(Long number, String name, String school) {        this.number = number;        this.name = name;        this.school = school;    }    @Override    public String toString() {        return "Student{" +                "number=" + number +                ", name='" + name + '\'' +                ", school='" + school + '\'' +                '}';    }}

写一个配置文件

<?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">    <!--这里是根据构造函数内的顺序往里面注入-->    <bean id="s1" class="com.crush.pojo.Student">       <constructor-arg index="0" value="12"/>        <constructor-arg index="1" value="wyh"/>        <constructor-arg index="2" value="北大"/>    </bean>    <!--这里是根据构造函数中的 类型来进行注入 -->    <bean id="s2" class="com.crush.pojo.Student">        <constructor-arg type="java.lang.Long" value="123"/>        <constructor-arg type="java.lang.String" value="crush"/>        <constructor-arg type="java.lang.String" value="浙江大学"/>    </bean></beans>

测试

   @org.junit.Test    public void testStudent(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        Student student = applicationContext.getBean("s2", Student.class);        System.out.println(student);    }

样例2:

创建Teacher类

public class Teacher {    private String name;    private String school;    private List<Student> studentList;    private Map<String,String> map;    private Set<String> set;    public Teacher(String name, String school, List<Student> studentList, Map<String, String> map, Set<String> set) {        this.name = name;        this.school = school;        this.studentList = studentList;        this.map = map;        this.set = set;    }    @Override    public String toString() {        return "Teacher{" +                "name='" + name + '\'' +                ", school='" + school + '\'' +                ", studentList=" + studentList +                ", map=" + map +                ", set=" + set +                '}';    }}public class Teacher {    private String name;    private String school;    private List<Student> studentList;    private Map<String,String> map;    private Set<String> set;    public Teacher(String name, String school, List<Student> studentList, Map<String, String> map, Set<String> set) {        this.name = name;        this.school = school;        this.studentList = studentList;        this.map = map;        this.set = set;    }    @Override    public String toString() {        return "Teacher{" +                "name='" + name + '\'' +                ", school='" + school + '\'' +                ", studentList=" + studentList +                ", map=" + map +                ", set=" + set +                '}';    }}

beans.xml

<bean id="teacher" class="com.crush.pojo.Teacher">    <constructor-arg index="0" value="xxx"/>    <constructor-arg index="1" value="北京大学"/>    <constructor-arg index="2" >        <list>            <ref bean="s1"/>            <ref bean="s2"/>        </list>    </constructor-arg>    <constructor-arg index="3">        <map>            <entry key="k1" value="xiaowang"/>        </map>    </constructor-arg>    <constructor-arg index="4">        <set>            <value>1</value>            <value>2</value>        </set>    </constructor-arg></bean>

测试

@org.junit.Test    public void testTeacher(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        Teacher teacher  = applicationContext.getBean("teacher", Teacher.class);        System.out.println(teacher);    }

Spring单例模式和原型模式

一、单例模式

Spring默认是单例模式的。

以Student的那个样例1 为例。 scope=“singleton” 加上这么一个设置 当然默认也是它。

bean id="s1" class="com.crush.pojo.Student" scope="singleton">    <constructor-arg index="0" value="12"/>    <constructor-arg index="1" value="wyh"/>    <constructor-arg index="2" value="北大"/></bean>

这个时候我们来进行测试

@org.junit.Test    public void testStudent(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        Student student1 = applicationContext.getBean("s1", Student.class);        Student student2 = applicationContext.getBean("s1", Student.class);        // 并且如果我们对其中一个做了修改 ,其余也会跟着一起被修改        // 可以看到我们只修改了一个        student1.setSchool("梦中的学校");        System.out.println(student1);        System.out.println(student2);        System.out.println(student1==student2);    }

Spring bean需要依赖注入的原因是什么

二、原型模式

我们还是以**Student来做例子讲解 **注意:我们把原来设置改成了 scope=“prototype” 也就是原型模式

<!--这里是根据构造函数中的 类型来进行注入 --><bean id="s2" class="com.crush.pojo.Student" scope="prototype">    <constructor-arg type="java.lang.Long" value="123"/>    <constructor-arg type="java.lang.String" value="crush"/>    <constructor-arg type="java.lang.String" value="浙江大学"/></bean>

接着测试

@org.junit.Test    public void testStudent(){        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");        Student student1 = applicationContext.getBean("s2", Student.class);        Student student2 = applicationContext.getBean("s2", Student.class);        // 并且如果我们对其中一个做了修改 ,其余也会跟着一起被修改        // 可以看到我们只修改了一个        student1.setSchool("梦中的学校");        System.out.println(student1);        System.out.println(student2);        System.out.println(student1==student2);    }

Spring bean需要依赖注入的原因是什么

思考 为什么需要依赖注入

为什么我们以前用一个对象 new一下就好了,但用了Spring 之后,反而还需要写

这样一段代码再去获取勒?明明感觉更麻烦啦丫?用这个又有什么样的好处呢?

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");Student student1 = applicationContext.getBean("s2", Student.class);

到此,关于“Spring bean需要依赖注入的原因是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯