[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;
}
}
'Spring' 카테고리의 다른 글
[spring] 자바 기반 Bean 설정 Configuration (0) | 2022.11.09 |
---|---|
[spring] 컴포넌트 스캔을 이용한 빈 등록 (0) | 2022.11.09 |
[spring] bean Scopes 빈 객체 범위 정의 (0) | 2022.11.09 |
[spring] 의존성 주입 - 생성자, setter, 프로퍼티 파일 (0) | 2022.11.09 |
[spring] 주요 인터페이스, 의존성 주입 개념 (0) | 2022.11.08 |
블로그의 정보
개발자 미니민의 개발로그
mini_min