본문 바로가기
수업 일지/Spring

61일차 - [Spring] 스프링 Bean 등록(어노테이션)

by 쿠쿠씨 2022. 4. 5.
반응형

인터페이스와 의존관계

 

의존관계를 나타내는 클래스의 프로퍼티를 인터페이스 타입으로 합니다.

→ 그 인터페이스 구현체 클래스를 주입할 수 있습니다.

→ 다른 기능을 구현하는 클래스로 변경이 용이합니다.

 

예제 : 인터페이스 의존관계

//MemberService 인터페이스
public interface MemberService {

	public void find(int idx);		//추상 메소드
}

//MemberDao 인터페이스
public interface MemberDao {

	public void find(int idx);		//추상 메소드
}

 

MemberDao 구현체

public class MybatisMemberDao implements MemberDao{

	public MybatisMemberDao() {
		System.out.println("MybatisMemberDao create /////");
	}
	@Override
	public void find(int idx) {
		System.out.println("Mybatis mapping : " + idx);
	}
}

 

public class JdbcMemberDao implements MemberDao{

	public JdbcMemberDao() {
		System.out.println("JdbcMemberDao create /////");
	}	
	@Override
	public void find(int idx) {
		System.out.println("JDBC connect : " + idx);
	}
}

 

MemberService 구현체

MemberDao 인터페이스의 구현체(클래스)로 의존관계를 주입합니다.

→ MybatisMemberDao, JdbcMemberDao 클래스가 있습니다.

public class YourMemberServiceImpl implements MemberService{
	private MemberDao dao;

	public YourMemberServiceImpl() {
		System.out.println("YourMemberServiceImpl create /////");
	}
	public void setDao(MemberDao dao) {	//의존관계 주입 setter
		this.dao = dao;
	}
	@Override
	public void find(int idx) {
		//예) 검색 비지니스 로직 처리 : Your 방식으로
		System.out.println("Your Logic~~~~~");
		dao.find(idx);
	}
}

 

public class MyMemberServiceImpl implements MemberService{
	private MemberDao dao;

	public MyMemberServiceImpl() {
		System.out.println("MyMemberServiceImpl create /////");
	}
	public MyMemberServiceImpl(MemberDao dao) {
		System.out.println("MyMemberServiceImpl create //////");
		this.dao=dao;
	}
//	public void setDao(MemberDao dao) {	//의존관계 주입 setter
//		this.dao = dao;			//setter와 커스텀 생성자의 객체 생성 순서 비교용
//	}
	@Override
	public void find(int idx) {
		//예) 검색 비지니스 로직 처리 : My 방식으로
		System.out.println("My Logic~~~");
		dao.find(idx);
	}
}

 

MemberController 클래스

MemberService 인터페이스의 구현체(클래스)로 의존관계를 주입합니다.

→ YourMemberServiceImpl, MyMemberServiceImpl 클래스가 있습니다.

public class MemberController {
	private MemberService service;
		
	public MemberController(MemberService service) {		//의존관계 주입 : 생성자
		System.out.println("MemberController create ///////");
		this.service=service;									
	}
	public void find(int idx) {
		System.out.println("MemberController find~~~~");
		service.find(idx);
	}
}

 

 

 

setter(기본 생성자)로 빈을 주입할 때와 커스텀 생성자로 빈을 주입할 때에 객체 생성 순서가 다릅니다.

 

반응형

댓글