복붙노트

[SPRING] 인터페이스가없는 Spring Bean 클래스를 정의하고 싶습니다.

SPRING

인터페이스가없는 Spring Bean 클래스를 정의하고 싶습니다.

나는 HibernateDaoSupport를 확장하는 스프링 빈을 가지고있다. 이 콩을 내 Controllers에 주입하고 싶지만 어떤 인터페이스도 구현하지 않기를 바란다. 난 단지 내 코드의 나머지 부분에서 구체적인 클래스를 참조하고 싶다. (아마도 AopProxy를 사용하지 않을 것인가?) 누군가이 일을 할 수있는 방법이 있는가?

<bean id="mySampleService" class="com.sample.MySampleService">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

@Autowired
private MySampleService mySampleService;

... getters and setters ....

나는 인터페이스를 사용하는 것이 좋으며, 그것이 IoC의 핵심이라는 것을 알고 있지만, 인터페이스를 사용하지 말아주십시오.

해결법

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

    1.(당신의 경우 트랜잭션 프록시에 의해) 프록시 될 클래스가 어떤 인터페이스 (자신의 경우 HibernateDaoSupport에 의해 구현 된 InitializingBean)를 구현한다면, Spring은 기본적으로 JDK 동적 프록시에 기반한 프록 싱 전략을 사용한다.

    (당신의 경우 트랜잭션 프록시에 의해) 프록시 될 클래스가 어떤 인터페이스 (자신의 경우 HibernateDaoSupport에 의해 구현 된 InitializingBean)를 구현한다면, Spring은 기본적으로 JDK 동적 프록시에 기반한 프록 싱 전략을 사용한다.

    따라서 MySampleService 유형의 필드에 주입 할 수없는 InitializingBean 유형의 프록시를 생성합니다.

    인터페이스를 사용하지 않으려면 proxy-target-class = "true"를 사용하여 을 선언하여 트랜잭션 측면에서 사용되는 전략을 재정의 할 수 있습니다.

    참조 :

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

    2.다음을 확인하십시오. 클래스 경로에 CGLIB가 있는지 확인하십시오.

    다음을 확인하십시오. 클래스 경로에 CGLIB가 있는지 확인하십시오.

    http://static.springsource.org/spring/docs/3.0.0.M3/spring-framework-reference/html/ch08s06.html

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

    3.xml에 매핑 된 컨트롤러를 포함한 모든 것을 bean으로 작성할 수 있습니다. 그런 다음 인터페이스를 작성할 필요가 없습니다. 그렇지 않으면 주석을 사용하여 프록시를위한 인터페이스를 만들어야합니다.

    xml에 매핑 된 컨트롤러를 포함한 모든 것을 bean으로 작성할 수 있습니다. 그런 다음 인터페이스를 작성할 필요가 없습니다. 그렇지 않으면 주석을 사용하여 프록시를위한 인터페이스를 만들어야합니다.

  4. from https://stackoverflow.com/questions/11528061/i-want-to-define-a-spring-bean-class-with-no-interface by cc-by-sa and MIT license