日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring(3)bean 注入-构造方法注入 那么又为什么需要依赖注入呢?

發(fā)布時間:2025/3/19 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring(3)bean 注入-构造方法注入 那么又为什么需要依赖注入呢? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

具體步驟:

  • 創(chuàng)建一個maven項目 spring-day1-constructor

  • 導(dǎo)入依賴

    <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>
  • 工程項目結(jié)構(gòu)

  • 樣例1:

  • 創(chuàng)建一個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;}@Overridepublic 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"><!--這里是根據(jù)構(gòu)造函數(shù)內(nèi)的順序往里面注入--><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><!--這里是根據(jù)構(gòu)造函數(shù)中的 類型來進(jìn)行注入 --><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="浙江大學(xué)"/></bean> </beans>
  • 測試

    @org.junit.Testpublic void testStudent(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");Student student = applicationContext.getBean("s2", Student.class);System.out.println(student);}
  • 樣例2:

  • 創(chuàng)建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;}@Overridepublic 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;}@Overridepublic 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="北京大學(xué)"/><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.Testpublic void testTeacher(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");Teacher teacher = applicationContext.getBean("teacher", Teacher.class);System.out.println(teacher);}
  • Spring單例模式和原型模式

    一、單例模式

    Spring默認(rèn)是單例模式的。

    以Student的那個樣例1 為例。 scope=“singleton” 加上這么一個設(shè)置 當(dāng)然默認(rèn)也是它。

    <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>

    這個時候我們來進(jìn)行測試

    @org.junit.Testpublic void testStudent(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");Student student1 = applicationContext.getBean("s1", Student.class);Student student2 = applicationContext.getBean("s1", Student.class);// 并且如果我們對其中一個做了修改 ,其余也會跟著一起被修改// 可以看到我們只修改了一個student1.setSchool("夢中的學(xué)校");System.out.println(student1);System.out.println(student2);System.out.println(student1==student2);}

    二、原型模式

    我們還是以**Student來做例子講解 ** 注意:我們把原來設(shè)置改成了 scope=“prototype” 也就是原型模式

    <!--這里是根據(jù)構(gòu)造函數(shù)中的 類型來進(jìn)行注入 --> <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="浙江大學(xué)"/> </bean>

    接著測試

    @org.junit.Testpublic void testStudent(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");Student student1 = applicationContext.getBean("s2", Student.class);Student student2 = applicationContext.getBean("s2", Student.class);// 并且如果我們對其中一個做了修改 ,其余也會跟著一起被修改// 可以看到我們只修改了一個student1.setSchool("夢中的學(xué)校");System.out.println(student1);System.out.println(student2);System.out.println(student1==student2);}

    思考 為什么需要依賴注入

    為什么我們以前用一個對象 new一下就好了,但用了Spring 之后,反而還需要寫

    這樣一段代碼再去獲取勒?明明感覺更麻煩啦丫?用這個又有什么樣的好處呢?

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

    這是為什么呢?

    如果想要知道為什么?那么就隨我一起去看下面這篇文章吧。

    用小說的形式講解Spring-為什么需要依賴注入

    參考:
    https://blog.csdn.net/hzy38324/article/details/78013136
    https://blog.csdn.net/weixin_45821811/article/details/117651505

    自言自語

    其實復(fù)習(xí)挺好的。

    總結(jié)

    以上是生活随笔為你收集整理的Spring(3)bean 注入-构造方法注入 那么又为什么需要依赖注入呢?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。