우선 처음부터 난관에 부딪혔는데, 이클립스에 메이븐 프로젝트를 import하는 과정에서 pom.xml 파일을 POM.xml 이렇게 대문자로 저장해서 처음엔 임포트가 되지 않았지만 해결했다.
우선 @Autowired는 일반 클래스에 의존 주입이 필요한 "필드" 나 "메서드"에 사용된다.
필드에는 지난 포스팅에서 보여줬듯이.
public class MemberRegisterService {
@Autowired private MemberDao memberdao;
public MemberRegisterService(MemberDao memberdao) {
this.memberdao = memberdao;
}
public MemberRegisterService() {
// TODO Auto-generated constructor stub
}
public void registermember(Member m) {
Member m1=memberdao.getidentifier(m);
if(m1!=null) {
throw new DuplicateMemberException("등록된 멤버의 ID가 중복되어있습니다.");
}
else {
memberdao.register(m);
System.out.println("등록완료 ID: "+m.getId()+" pwd: "+m.getPwd() );
}
}
}
이렇게 memberdao 필드를 자동주입 시켜줌으로, 굳이 생성자를 이용한 의존주입을 하지 않아도 된다.
이번엔 메서드에 적용하는 것인데, 내가 의존주입하는 대상이 파라미터일 경우에 사용한다.
public class MemberPrinter {
private MemberDao dao;
@Autowired
public void setMemberDao(MemberDao dao) {
this.dao=dao;
}
public void printMember() {
for(Entry<Integer,Member> entry : dao.getMap().entrySet()) {
System.out.println();
System.out.printf("ID : %d PWd : %d\n",entry.getKey(),entry.getValue().getPwd());
}
}
}
이렇게 세터 함수의 파라미터를 자동주입 하고 싶은 경우, @Autowired를 사용하면, @Configuration 스프링 설정 클래스에서 별도의 설정 없이도 의존주입이 이루어진다.
필드에 @Autowired를 한 예.
@Configuration
@Import(AppCtx2.class)
public class AppCtx1 {
@Bean
public MemberDao memberdao() {
MemberDao m=new MemberDao();
return m;
}
@Bean
public MemberRegisterService mrsvc() { //생성자를 통한 의존주입 없이도 동작 가능.
//필드에 @Autowired를 한 예.
MemberRegisterService mrsvc=new MemberRegisterService();
return mrsvc;
}
@Bean
public PasswordChangeService pcsvc() {
PasswordChangeService pcsvc=new PasswordChangeService(memberdao());
return pcsvc;
}
}
메서드에 @Autowired를 한 예.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppCtx2 {
@Bean
public MemberPrinter printer() {
MemberPrinter printer=new MemberPrinter();
//printer.setMemberDao(memberdao);
//이렇게 세터 메서드를 사용하지 않아도,
//@Autowired가 알아서 의존주입 해준다.
return printer;
}
}
공부시간 40분.
순공시간 40분.
어제 잠을 못자서 그런지 오늘은 청년 일자리 카페에 와서 공부했지만 집중이 잘 안됬다.
'기록 > Spring framework' 카테고리의 다른 글
@Autowired의 스프링 빈 필수여부( null 값 전달.), 의존 자동주입과 수동주입의 우선순위. 2021-11-18 (2) | 2021.11.18 |
---|---|
의존 자동주입 할때 타입이 일치하는 빈 중 의존 주입할 대상 빈을 선택하는 방법: @Qualifer 이용법. 2021-11-12 (0) | 2021.11.12 |
스프링 설정 클래스에서 @Autowired를 통한 자동 DI, 설정메서드(세터) 형식의 DI, 두개 이상의 설정 클래스로 스프링 컨테이너 만들기. 2021-10-22 (0) | 2021.10.22 |
스프링의 역할: 객체 조립기(@Configuration) (0) | 2021.10.19 |
객체 조립기(Assembler)의 필요성. 2021-10-18 (0) | 2021.10.15 |