[SPRING] 추상 클래스에 정의 된 스프링 autowire 의존성
SPRING추상 클래스에 정의 된 스프링 autowire 의존성
나는 @Autowired 의존성을 갖는 추상 클래스 "Command"와 추상 클래스를 확장하는 클래스들을 가지고있다. 종속성이 주입되지 않습니다. 추상적이고 구체적인 클래스는 @Component로 주석을 달고 스캔됩니다. 기본 (추상) 클래스는 스프링 관리되지 않는 것 같습니다. 그것이되기 위해서 무엇을해야합니까? 추상적으로 정의 할 주석이 있습니까? 나는 XML로 빈을 정의하고 싶지 않다.
public abstract class Command {
@Autowired
private SecurityUtils securityUtils;
....
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class NoteCommand extends Command {
...
}
나의 실수는 사과한다. 명령 클래스는 내 컨트롤러에 주입되고 그 중 하나 (NoteCommand)가 "new"를 통해 수동으로 인스턴스화됩니다. 모두 좋은.
해결법
-
==============================
1.이는 XML 구성 (주석에 대해 확실하지 않음)을 통해 이루어질 수 있습니다. 읽기 http://docs.spring.io/spring-framework/docs/3.0.0.RC3/reference/html/ch03s07.html
이는 XML 구성 (주석에 대해 확실하지 않음)을 통해 이루어질 수 있습니다. 읽기 http://docs.spring.io/spring-framework/docs/3.0.0.RC3/reference/html/ch03s07.html
이것을 시도해보십시오 (자식 빈에 다른 설정을 추가 하시겠습니까?).
<bean id = "command" class = "some.package.name.Command" abstract = "true"> <property name = "securityUtils" ref = "securityUtils"/> </bean> <bean id ="noteCommand" class = "some.package.name.NoteCommand" parent="commadn"> </bean>
건배!
-
==============================
2.제 경우에는 스프링 4 애플리케이션에서 고전적인 추상 팩터 리 패턴 (http://java-design-patterns.com/patterns/abstract-factory/에서 아이디어를 가져 와서 각각 인스턴스를 생성해야만했습니다)을 사용해야했습니다. 그리고 때마다 작업이 완료되었습니다. 그래서 내 코드는 다음과 같이 설계되었습니다.
제 경우에는 스프링 4 애플리케이션에서 고전적인 추상 팩터 리 패턴 (http://java-design-patterns.com/patterns/abstract-factory/에서 아이디어를 가져 와서 각각 인스턴스를 생성해야만했습니다)을 사용해야했습니다. 그리고 때마다 작업이 완료되었습니다. 그래서 내 코드는 다음과 같이 설계되었습니다.
public abstract class EO { @Autowired protected SmsNotificationService smsNotificationService; @Autowired protected SendEmailService sendEmailService; ... protected abstract void executeOperation(GenericMessage gMessage); } public final class OperationsExecutor { public enum OperationsType { ENROLL, CAMPAIGN } private OperationsExecutor() { } public static Object delegateOperation(OperationsType type, Object obj) { switch(type) { case ENROLL: if (obj == null) { return new EnrollOperation(); } return EnrollOperation.validateRequestParams(obj); case CAMPAIGN: if (obj == null) { return new CampaignOperation(); } return CampaignOperation.validateRequestParams(obj); default: throw new IllegalArgumentException("OperationsType not supported."); } } } @Configurable(dependencyCheck = true) public class CampaignOperation extends EO { @Override public void executeOperation(GenericMessage genericMessage) { LOGGER.info("This is CAMPAIGN Operation: " + genericMessage); } }
처음에는 추상 클래스에 종속성을 주입하기 위해 @Component, @Service 등의 모든 스테레오 타입 주석을 시도했지만 스프링 컨텍스트 파일에는 전체 패키지에 대해 ComponentScanning이 있었지만 CampaignOperation과 같은 하위 클래스 인스턴스를 생성하는 동안 Super Abstract 클래스 EO는 Spring이 그 의존성을 인식하고 삽입 할 수 없기 때문에 그 속성을 null로 가지는 것은 많은 시행 착오 끝에 ** Configurable (dependencyCheck = true) ** annotation을 사용했고 결국 Spring은 의존성을 주입 할 수 있었고 속성을 너무 많이 사용하지 않고 하위 클래스의 속성을 사용하십시오.
<context:annotation-config /> <context:component-scan base-package="com.xyz" />
또한 해결책을 찾기 위해 다음 참조를 시도했습니다.
** @ Configurable (dependencyCheck = true) **을 사용해 보시고이 게시물을 업데이트하십시오. 문제가 발생할 경우 도와 드리겠습니다.
from https://stackoverflow.com/questions/19714586/spring-autowire-dependency-defined-in-an-abstract-class by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 부팅에서 ProblemHandler를 ObjectMapper로 설정할 수 없음 (0) | 2019.02.25 |
---|---|
[SPRING] Spring 데이터 MongoDB 저장소 - JPA 스펙 (0) | 2019.02.25 |
[SPRING] Spring 3.0.5 - java.awt.HeadlessException - com.trend.iwss.jscan (0) | 2019.02.25 |
[SPRING] Spring Social 3.0.0.M1의 org.springframework.social.connect.ConnectionRepository 클래스는 어떻게 되었습니까? (0) | 2019.02.25 |
[SPRING] Spring 통합 - 외부 쿼리 JDBC 쿼리 (0) | 2019.02.25 |