xml 파일에서 <bean> 태그를 활용한 의존 주입 방법에는
setter를 이용한 방법 / 생성자를 이용한 방법이 있다.
아래 예제를 확인해보자.
1) 스프링에서 객체를 생성하는 방법
- new 하는 것이 아니고, xml <bean> 태그 안에서 작업이 이루어진다
<bean id="test" class="basic2.SpringTest" />
// 사용하고자 하는 SpringTest 객체(=클래스)를 test라는 이름으로 저장
// new 하려고 하는 클래스명을 class에 적고, id는 참조변수명과 동일해도 문제 없는 듯
// 메인에서 호출할 때
SpringTest test = ct.getBean("test", SpringTest.class);
test.hello();
2) 서로 관련이 있는 클래스들에 의존성 주입하기 - 생성자 사용
-xml에다가 의존성을 등록해놓으면, 메인 메소드에서 의존이 연결된 대표적인 클래스만 불러내도
문제없이 연결된 모든 클래스의 메서드가 실행됨
<!-- Hotel 객체와 의존 객체들의 빈 등록 및 의존성 주입 설정 -->
<bean id="chef" class="com.spring.basic2.ex01.Chef" />
<!-- 생성자를 통한 의존성 주입 -->
<bean id="res" class="com.spring.basic2.ex01.Restaurant">
<constructor-arg ref="chef" /> // ref = 생성자 인수의 값은 "chef(=id값이 들어감)"
</bean>
<bean id="hotel" class="com.spring.basic2.ex01.Hotel">
<constructor-arg ref="res" /> // 얘는 res꺼를 가져오니까 자동으로 chef꺼도 갖게됨
</bean>
**생성자를 통한 의존성 주입은 객체 생성만 가능하게 한다 / 값 주입은 안된다
**생성자를 통한 의존성 주입 코드에는 의존성이 필요한 클래스마다 생성자들이 들어간다.
(매개변수에는 필요로 하는 인자를 받는다) 왜냐하면 생성자를 통한 의존성 주입 방법이니까!
반대로, setter를 통한 의존성 주입 방법에서는 setter 메서드가 들어간다.
3-1) 서로 관련이 있는 클래스들에 의존성 주입하기 - setter 사용 (값 주입)
-setter로 의존성을 주입하는 경우에는, 각각 클래스에 set,get 메서드를 설정해주는 것이 필수 사항
(이해가 안간다면 코드를 쭉 보고 이해해봐)
<bean id="db1" class="com.spring.basic2.ex02.DataBaseInfo"> // id는 내가 원하는 것으로 (객체명)
<property name="url" value="jdbc:oracle:thin@localhost:1521:xe" />
<property name="uid" value="spring1" />
<property name="upw" value="1234" />
// name에는 멤버변수명, value에는 내가 넣고 싶은 값 셋팅
</bean>
//또 다른 객체 추가해보기 (의미두지마)
<bean id="db2" class="com.spring.basic2.ex02.DataBaseInfo"> // id는 내가 원하는 것으로 (객체명)
<property name="url" value="jdbc:mysql://localhost:3306/spring" />
<property name="uid" value="root" />
<property name="upw" value="mysql" />
</bean>
3-2) 서로 관련이 있는 클래스들에 의존성 주입하기 - setter 사용 (객체 주입 - 생성자와 비슷한 느낌)
-서로를 꼭 필요로 하는 클래스들끼리의 의존성을 만들어줌
-모든 클래스의 값들을 가지고 있는 꼭대기? 클래스의 메서드를 메인에서 호출하면 다른 클래스의 내용들까지 주르륵 이어서 출력됨. 왜냐? xml에서 의존성을 맺어주는 코드를 적어줬거든.
대신에 클래스에 꼭 set.get이 존재해야해!!!!
<!-- setter를 통한 객체 주입 방법 (생성자와 같은 개념이다) -->
<!-- MemberDAO는 DataBaseInfo 클래스를 꼭! 필요로 한다 (의존관계다) -->
<bean id="dao" class="com.spring.basic2.ex02.MemberDAO">
<property name="dbInfo" ref="db2"></property>
// name에는 멤버변수명, ref에는 필요로 하는 값들이 담긴 객체명(=bean의 id값)
</bean>
'SPRING' 카테고리의 다른 글
Java 설정 파일 쪼개기 - @Import (0) | 2020.09.22 |
---|---|
Java 설정 파일 - 직접 주입 / 자동 주입 어노테이션 (0) | 2020.09.22 |
의존 자동 주입 @Autowired @Qualified @Resource (0) | 2020.09.18 |
스프링 객체 생성하기 - 싱글톤 패턴 (0) | 2020.09.15 |
maven 프로젝트 / IoC (0) | 2020.09.14 |