개발자 미니민의 개발스터디

[spring] Annotation 기반 Bean 설정

by mini_min
[spring] Annotation 기반 Bean 설정

✔️ 애노테이션을 이용한 의존 관계 설정

: 애노테이션을 이용해 설정파일을 간결화하고 객체 또는 메소드의 맵핑을 명확히 할 수 있다.

✨ 자바 코드로 설정하기 때문에 type safe 하고 스프링이 빠르게 컨테이너를 설정한다.

✨ 애노테이션만 봐도 어떤 스프링 설정이 된 클래스인지 한눈에 알 수 있다.

✨ 설정이 변경될 경우 애노테이션 코드 클래스 파일까지 수정해야한다.

📓 의존성 주입

Field Injection, setter Injection, Constructor Injection

 

 

✔️ 필드 / 세터 / 생성자 의존성 주입 : @Autowired

-- 예시

-- applicationContext.xml

✨ <context:annotation-config/> 을 사용해야 애노테이션들이 활성화된다.

<!-- @Autowired, @Resource 등 어노테이션 활성화 -->
<context:annotation-config/>


<bean id="userService" class="com.anno.user1.UserServiceImpl"/>

<bean id="user" class="com.anno.user1.User" />
<bean id="user2" class="com.anno.user1.User2" />
<bean id="user3" class="com.anno.user1.User3" />

 

-- UserServiceImpl

public class UserServiceImpl implements UserService {
	private String name;
	private String tel;
	private int age;
	
	public UserServiceImpl() {
		this.name = "김자바";
		this.tel = "010-1111-2222";
		this.age = 20;
	}
	
	@Override
	public String message() {
		String s = name + " : " + tel + " : " + age + 
				 (age >= 19 ? " , 성인 " : " , 미자 ");
		
		return s;
	}
	
	
}

 

✨ 필드를 이용한 의존성 주입

: setter 필요 없다!!!. 즉, 외부에서 접근 불가! 하다는 뜻

@Autowired : 타입을 이용한 의존관계 설정하기. 암기할것 !! 

// 필드를 이용한 의존성 주입. setter 필요 없다!!!. 외부에서 접근 불가! 하다는 뜻
@Autowired 			// 타입을 이용한 의존관계 설정하기. 암기할것 !! 
private UserService userService;
//해당 어노테이션을 활성화시켜줘야한다.

 

✨ setter를 이용한 의존성 주입

: setter 필요

@Autowired 			
public void setUserService(UserService userService) {
    this.userService = userService;
}

 

✨ 생성자를 이용한 의존성 주입

: spring 5.1부터는 <context:annotation-config/>가 설정된 경우 @Autowired 생략 가능

@Autowired 			
public User3(UserService userService) {
    this.userService = userService;
}

 

 

✔️ @Qualifier : 동일한 타입이 둘 이상일 때

: @Autowired 와 함께 사용하며, 이름을 이용하여 의존성 주입 (단독 사용 x)

동일한 타입이 2개 이상인 경우에는 @Qualifier 으로 이름을 이용해서 의존성 주입한다.

@Autowired
@Qualifier("userService2") //@Autowired 와 함께 사용하며, 이름을 이용하여 의존성 주입 (단독 사용 x)
//동일한 타입이 2개 이상인 경우에는 @Qualifier 으로 이름을 이용해서 의존성 주입한다.
private UserService userService;

 

 

✔️ @Resource : name 속성을 사용하지 않는 경우

: 자바가 제공하는 애노테이션이며, 이름으로 빈의 의존성을 주입한다.

name 속성을 생략한 경우, 필드와 동일한 이름을 갖는 빈을 주입한다. 버전이 올라가면 사용 못하는 경우 있다.

✨ name = " " : 이름을 명시할 수 있다.

@Resource		// 자바가 제공하는 애노테이션. 이름으로 빈의 의존성을 주입한다.
                // name 속성을 생략한 경우, 필드와 동일한 이름을 갖는 빈을 주입한다. 버전이 올라가면 사용 못하는 경우 있다.
private UserService userService;
@Resource(name = "userService2")
private UserService userService;

 

 

✔️ @Inject : 타입으로 의존성을 주입

: 자바에서 제공한다. 타입으로 의존성 주입. 동일한 타입이 둘 이상이면 이름으로 빈 의존성 주입한다.

(타입이 안되면 이름으로 의존성 주입)

✨ 이름으로 빈 의존성 주입할 때는 Named 애노테이션 이용

@Inject // 자바 제공. 타입으로 의존성 주입. 동일한 타입이 둘 이상이면 이름으로 빈 의존성 주입한다.
private UserService userService;
@Inject
@Named("userService2")
private UserService userService;

 

 

✔️ @Value : 타입으로 의존성을 주입

: 기본 자료형과 문자열의 값을 필드에 주입하기 위해 사용한다. 

필드나 생성자와 메소드는 매개변수 수준에서 적용할 수 있다. 

생성자 주입 시 자동으로 주입되지 않는 기본 자료형과 문자열의 값을 설정한다.

public class UserServiceImpl implements UserService {
	private String name;
	private String tel;
	private int age;
	
	@Value("자바")
	private String subject;
	
	public UserServiceImpl(@Value("다자바") String name, @Value("010-2222-3333") String tel, @Value("20") int age) {
		this.name = name;
		this.tel = tel;
		this.age = age;
		
	}
	
	@Override
	public String message() {
		String s = name + " : " + tel + " : " + age + 
				 (age >= 19 ? " , 성인 " : " , 미자 ") + " : " + subject;
		
		return s;
	}
	
	
}

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기