Spring bean 은 왜 주입 에 의존 해 야 합 니까?
1.maven 프로젝트 spring-day 1-constructor 만 들 기
2.가 져 오기 의존
<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>
3.프로젝트 구조샘플 1:
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>
3.테스트
@org.junit.Test
public void testStudent(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Student student = applicationContext.getBean("s2", Student.class);
System.out.println(student);
}
샘플 2:1.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 +
'}';
}
}
2.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>
3.테스트
@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);
}
2.원형 모델
우 리 는 여전히**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);
}
왜 주입 에 의존 해 야 하 는 지 생각 하 다.
왜 우 리 는 예전 에 한 대상 new 를 사용 하면 좋 았 는데 Spring 을 사용 한 후에 오히려 써 야 합 니까?
이런 코드 를 다시 가 져 오 시 겠 습 니까?더 귀 찮 은 데,가장귀?이 걸 로 또 어떤 좋 은 점 이 있 을까요?
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Student student1 = applicationContext.getBean("s2", Student.class);
총결산이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.