반응형
인터페이스와 의존관계
의존관계를 나타내는 클래스의 프로퍼티를 인터페이스 타입으로 합니다.
→ 그 인터페이스 구현체 클래스를 주입할 수 있습니다.
→ 다른 기능을 구현하는 클래스로 변경이 용이합니다.
예제 : 인터페이스 의존관계
//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(기본 생성자)로 빈을 주입할 때와 커스텀 생성자로 빈을 주입할 때에 객체 생성 순서가 다릅니다.
반응형
'수업 일지 > Spring' 카테고리의 다른 글
65일차 - [Spring] Model/@ModelAttribute/@SessionAttribute (0) | 2022.04.11 |
---|---|
64일차 - [Spring] 서블릿/MVC 패턴 (0) | 2022.04.08 |
63일차 - [Spring] spring 트랜잭션/빌더 패턴/JUnit 테스트 케이스 (0) | 2022.04.07 |
62일차 - [Spring] mybatis-spring/dbcp (0) | 2022.04.06 |
60일차 - [Spring] 스프링 설치/스프링 Bean 등록(XML) (0) | 2022.04.04 |
댓글