* 의존 객체 주입을 자동화
@Resource = @Autowired + @Qualifier 방법을 사용한다.
`@Resource` 어노테이션은 자바 표준(JSR-250)으로 정의된 어노테이션으로, 스프링 프레임워크와 같이 다양한 자바 환경에서 사용될 수 있습니다. `@Resource` 어노테이션은 주로 의존 객체를 주입할 때 사용되며, 주입하는 객체를 지정하는데 사용됩니다. `@Resource` 어노테이션의 역할과 `@Autowired`와 `@Qualifier` 조합의 관계를 설명하겠습니다.
1. **`@Resource` 어노테이션의 역할:**
`@Resource` 어노테이션은 주입하려는 빈을 지정하고 의존 객체를 자동으로 주입합니다. 주입될 빈은 해당 필드나 메서드 파라미터의 이름을 기반으로 스프링 컨테이너에서 찾아서 주입합니다. 또한, `name` 속성을 사용하여 빈의 이름을 직접 지정해줄 수도 있습니다.
@Resource
private MyService myService;
2. **`@Autowired`와 `@Qualifier` 조합과의 관계:**
`@Autowired` 어노테이션은 스프링 프레임워크에서 제공하는 어노테이션으로, 의존 객체를 주입할 때 사용됩니다. 그런데 `@Autowired`만 사용하면 동일한 타입의 여러 빈이 존재할 경우 어떤 빈을 주입해야 하는지 스프링이 판단하지 못하는 경우가 발생합니다. 이때 `@Qualifier` 어노테이션을 사용하여 어떤 빈을 주입할지 명시해주어야 합니다.
@Autowired
@Qualifier("myBean")
private MyBean myBean;
3. **`@Resource` 어노테이션과 `@Autowired` + `@Qualifier` 조합:**
`@Resource` 어노테이션은 `@Autowired`와 `@Qualifier` 어노테이션의 역할을 조합한 것으로 볼 수 있습니다. 즉, `@Resource` 어노테이션을 사용하면 필드나 메서드 파라미터의 이름을 기반으로 해당 이름의 빈을 찾아서 주입하며, 필요에 따라 `name` 속성을 사용하여 명시적으로 빈의 이름을 지정할 수도 있습니다.
@Resource
private MyService myService;
@Resource(name = "myBean")
private MyBean myBean;
이와 같이, `@Resource` 어노테이션은 스프링 뿐만 아니라 다양한 자바 환경에서 사용 가능하며,
`@Autowired`와 `@Qualifier` 조합의 기능을 대체할 수 있는 어노테이션입니다.
개발자는 상황에 따라 더 적합한 어노테이션을 선택하여 사용할 수 있습니다.
* 클래스를 이용하여 스프링 설정하기
// @Component와 같은 애노테이션을 사용할 수 없는 경우
// Java Config 에서 수동으로 객체를 생성할 수 있다.
// 방법:
// 1) 객체를 생성하여 리턴하는 메서드를 정의한다.
// 2) 그리고 그 메서드에 @Bean 애노테이션을 붙인다.
//
// @Bean 애노테이션을 붙이면,
// 스프링 IoC 컨테이너(AnnotationConfigApplicationContext)는
// 해당 메서드를 호출하고,
// 그 메서드가 리턴한 객체를 컨테이너에 보관한다.
// 컨테이너에 보관할 때 사용할 객체 이름은
// @Bean(객체이름) 애노테이션에 설정된 이름을 사용한다.
// 만약 @Bean 애노테이션에 이름이 없으면,
// 메서드 이름을 객체 이름으로 사용한다.
@Bean("car") // 애노케이션에 지정한 이름으로 리턴 값을 보관한다.
public Car getCar2() {
Car c = new Car(null);
c.setMaker("비트자동차");
c.setModel("티코");
c.setCc(890);
c.setAuto(true);
return c;
}
@Bean // 이름을 지정하지 않으면 메서드 이름을 사용하여 저장한다.
public Car getCar() {
Car c = new Car(null);
c.setMaker("비트자동차");
c.setModel("티코");
c.setCc(890);
c.setAuto(true);
return c;
}
// 실무에서는 스프링 설정용으로 사용하는 클래스에서
// 객체를 리턴하는 메서드를 만들 때
// 그 메서드의 이름을 객체 이름과 같게 짓는다.
// => 보통 어떤 값을 리턴할 때는 getXxx()라는 이름으로 메서드를 만드는데,
// 이처럼 객체이름으로 사용할 수 있도록 메서드를 만드는 경우도 있으니
// 당황하지 말라!
@Bean
public Car car2() {
Car c = new Car(null);
c.setMaker("비트자동차");
c.setModel("티코");
c.setCc(890);
c.setAuto(true);
return c;
}
}
* Spirng JDBC 도입
Appconfig
전)
XML
전)
Appconfig
후)
<XML>
기존 xml은 제거됨. Appconfig class 에서 직접 다룸.
xml의 environments를 제거하는 @Bean DataSource
<Appconfig>
<XML>
xml의 mapper 를 제거하는 @MapperScan
<Appconfig>
<XML>
이렇게 제거되면 xml 파일은 더 이상 필요하지 않다. (제거)
<MemberDao 수정>
<xml수정>
<객체를 받아서 사용하는 클래스 수정>
sqlsession과 Sqlboard, sqldmember 등의 파일은 삭제