복붙노트

[SPRING] 인터페이스를 사용하는 이유는 무엇입니까 (Java EE 또는 Spring 및 JPA)

SPRING

인터페이스를 사용하는 이유는 무엇입니까 (Java EE 또는 Spring 및 JPA)

대부분의 (스프링 및 JPA) 클래스는 인터페이스로 설계되었습니다. 상속을 제외하고 기술적 인 이유가 있습니까? dynaimc 프록시 나 Aop과 같은,이 것에 대한 기술적 인 세부 사항이 필요합니다.

전의

public interface UserDAO {
   void delete();
   void update();
   void save();
   List<User> get();
}

public class UserDAOImpl implements UserDAO {
   public void delete(){}
   public void update(){}
   public void save(){}
   public List<User> get(){}
}

해결법

  1. ==============================

    1.IMO에는 3 가지 주된 이유가 있습니다.

    IMO에는 3 가지 주된 이유가 있습니다.

    Spring에 UserDAO 타입의 bean을 요청하면 실제로는 실제 UserDAOImpl 인스턴스를 캡슐화하는 프록시를 리턴 할 것이다. 이를 통해 트랜잭션을 구분하고, 보안 권한 부여를 확인하고, 액세스를 로그하고, 통계를 계산할 수 있습니다. 인터페이스가 없어도 가능하지만 바이트 코드 조작이 필요합니다.

    UserDAO를 사용하는 비즈니스 서비스를 단위 테스트 할 때 일반적으로 모의 UserDAO 구현을 주입합니다. 다시 한번, 이것은 UserDAO가 인터페이스 일 때 더 쉽게 할 수 있습니다. 구체적인 클래스에서는 가능하지만 언제나 그런 것은 아니며 인터페이스를 사용하면 더 쉽습니다.

    인터페이스를 사용하면 클라이언트를위한 DAO의 실제 계약을 정의 할 수 있습니다. 물론 구체적인 구현에서는 setDataSource () 메서드가 필요하지만 클라이언트는 그것에 대해 신경 쓰지 않습니다. 필요한 것은 DAO에서 제공하는 데이터 액세스 방법 집합뿐입니다. 인터페이스와 구체적인 구현을 분리함으로써 클라이언트가 DAO의 구현 세부 사항에 의존하지 않는지 확인합니다.

  2. ==============================

    2.모래밭

    모래밭

  3. ==============================

    3.당신은 봄 explicite 언급했기 때문에.

    당신은 봄 explicite 언급했기 때문에.

    Spring AOP는 다른 환경에서 사용될 수있다. 디폴트는 Java 동적 프록시 (java.lang.reflect.Proxy)를 사용합니다. 인터페이스에만 적용 할 수 있습니다.

    @see Spring 참조 Chapter 7.1.3 AOP 프록시 @see 동적 프록시 클래스

  4. from https://stackoverflow.com/questions/8894883/what-reasons-are-there-to-use-interfaces-java-ee-or-spring-and-jpa by cc-by-sa and MIT license