복붙노트

[SPRING] 스프링 자동 와이어링 클래스 대 인터페이스?

SPRING

스프링 자동 와이어링 클래스 대 인터페이스?

나는이 봄 설정을 가지고있다 :

<bean id="boo" class="com.x.TheClass"/>

TheClass 클래스는 TheInterface를 구현합니다. 그럼 나는 (가상의) 자바 코드를 가지고있다.

@Autowired
TheInterface x;

@Autowired
TheClass y;

The Interface의 autowiring은 작동하지만 The Class의 autowiring은 실패합니다. Spring은 클래스에 NoSuchBeanDefinitionException을 준다.

클래스가 아닌 인터페이스를 연결할 수있는 이유는 무엇입니까?

해결법

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

    1.보통 둘 다 작동 할 것이고, 인터페이스 나 클래스를 autowire 할 수 있습니다.

    보통 둘 다 작동 할 것이고, 인터페이스 나 클래스를 autowire 할 수 있습니다.

    생성 된 프록시 객체에 boo bean을 래핑하는 어쩌면 컨텍스트의 어딘가에 자동 프록시 생성기가있을 것입니다. 이 프록시 객체는 TheInterface를 구현하지만 TheClass는 아닙니다. 자동 프록시를 사용할 때는 구현이 아닌 인터페이스에 프로그램해야합니다.

    가장 가능성있는 후보는 트랜잭션 프록시입니다. AspectJ 또는 @Transactional을 사용하여 Spring 트랜잭션을 사용하고 있습니까?

  2. from https://stackoverflow.com/questions/2387431/spring-autowiring-class-vs-interface by cc-by-sa and MIT license