<!-- scope : 기본 - singleton : 하나의 객체만 생성 -->
<bean id="movie" class="com.scope1.Movie"/>
<!-- prototype : 빈에서 객체를 호출할 때마다 객체가 생성 -->
<bean id="music" class="com.scope1.Music" scope="prototype"/>
<aop:scoped-proxy/>
- 실제 인스턴스가 아닌 proxy 객체 주입
- 해당 클래스의 메서드를 호출할 때마다 객체 생성
<constructor-arg>
- 매개변수가 있는 생성자를 호출하여 초기화
constructor-arg 태그를 이용한 필드 초기화
<!-- 빈 생성시 인자가 3개인 생성자를 이용해 필드 초기화 -->
<bean id="userService2" class="com.user1.UserServiceImpl2">
<constructor-arg name="tel" value="010-1111-3333"/>
<constructor-arg name="name" value="너자바"/>
<constructor-arg name="age" value="20"/>
</bean>
public class UserServiceImpl2 implements UserService {
private String name;
private String tel;
private int age;
public UserServiceImpl2(String name, String tel, int age) {
this.name = name;
this.tel = tel;
this.age = age;
}
}
constructor-arg 태그를 이용한 의존성 주입
<!-- 인자가 하나인 생성자를 이용하여 빈을 정의 -->
<!-- 생성자를 이용하여 의존성을 주입 -->
<bean id="user" class="com.user1.User">
<constructor-arg ref="userService2"/>
</bean>
public class User {
private UserService userService;
public User(UserService userService) {
this.userService = userService;
}
}
c 네임스페이스를 이용한 생성자에 값 설정
<bean id="userService2" class="com.user2.UserServiceImpl2"
c:name="네임스페이스" c:tel="010-1111-2222" c:age="20"/>
public class UserServiceImpl2 implements UserService {
private String name;
private String tel;
private int age;
// c:name, c:tel, c:age 값을 파라미터 변수명에 맞게 대입하여 초기화
public UserServiceImpl2(String name, String tel, int age) {
this.name = name;
this.tel = tel;
this.age = age;
}
}
c 네임스페이스를 이용한 의존성 주입
<bean id="user" class="com.user2.User"
c:userService-ref="userService2"
init-method="init"
destroy-method = "destroy"
/>
public class User {
private UserService userService;
// c:userService-ref를 이용한 의존성 주입
public User(UserService userService) {
this.userService = userService;
}
public void init() {
System.out.println("초기화 작업");
}
public void destroy() {
System.out.println("객체 소멸전 작업");
}
}
<property> - setter를 이용한 의존성 주입
- setter 주입은 프로그램 실행중 주입된 값 변경 가능
- 반드시 setter가 존재해야 한다.
- setter는 name 속성의 이름 기준으로 첫글자를 대문자로 하여 set을 붙인 메소드
- name="userService" -> setUserService
p 네임스페이스 - setter를 이용한 프로퍼티 설정
<bean id="userService" class="com.user4.UserServiceImpl"
p:name="너자바" p:tel="010-1111-2222" p:age="20"/>
p 네임스페이스 - setter를 이용한 의존성 주입
<bean id="user" class="com.user4.User"
p:userService-ref="userService"/>
public class User {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
}
자동 의존성 주입
- byName : 프로퍼티와 동일한 이름의 빈을 찾아 주입(setter injection)
- byType : 프로퍼티와 동일한 타입의 빈을 찾아 주입(setter injection)
(동일타입이 하나인 경우에만 사용 가능)
'Backend > Spring' 카테고리의 다른 글
스프링 어노테이션 정리 - AOP 구현, 시점 기반 (0) | 2022.11.13 |
---|---|
스프링 어노테이션 정리 - 환경설정, 값 주입 (0) | 2022.11.13 |
스프링 핵심 개념 - IoC, DI, Model (0) | 2022.11.13 |
스프링 어노테이션 정리 - 컨트롤러, 매핑, 파라미터 주입 (0) | 2022.11.11 |
스프링 어노테이션 정리 - 의존성 주입, 빈 등록 (0) | 2022.11.10 |