當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring(3)bean 注入-构造方法注入 那么又为什么需要依赖注入呢?
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring(2)bean注入--Set
- 下一篇: gradle idea java ssm