요즘 클린코드 등등 .. 여러 책을 보면서
아 클래스 설계를 어떻게하면 조금 더 좋아질까라는 고민을 많이하다가
기능분류로 묶어가면서 해야겠다 라고 생각하던 도중에 찾게된 방법 ..
나같은 경우는 enum에서
@Autowired로 받아야되는 필드가있는데
어캐해야될지 몰랐었음
아래는 방법
public enum ReportType {
REPORT_1("name", "filename"),
REPORT_2("name", "filename");
@Component
public static class ReportTypeServiceInjector {
@Autowired
private DataPrepareService dataPrepareService;
@PostConstruct
public void postConstruct() {
for (ReportType rt : EnumSet.allOf(ReportType.class))
rt.setDataPrepareService(dataPrepareService);
}
}
[...]
}
글에서는 ReportTypeServiceInjector 를 public으로 선언하지만
나는 클래스 내부에서 한정적으로 private로 선언했다
그리고 enum class에서 @Autowired 받을 필드의 setter 메서드를 다음과 같이 만들었다
private static void set( ... field ) {
//this.field = field
}
그리고 set 메서드를 postConstruct() 메서드 안에서 호출했다.
이런식으로 하면
enum 클래스에 @Component와 @Autowired 필드를 따로 두지 않고
inner 클래스를 활용해서 field를 set할 수 있당..
출처 : https://stackoverflow.com/questions/16318454/inject-bean-into-enum/39097926
'spring' 카테고리의 다른 글
[Spring] Spring Framework #2 AOP편 (0) | 2019.06.05 |
---|---|
[Spring] Spring Framework #1 DI/IoC편 (0) | 2019.06.05 |
[Spring Boot]Spring Boot 에서 외부 library 추가하고 spring-boot-maven-plugin 로 Build 하기 (2) | 2019.04.10 |
[Spring] Spring quartz 와 @Autowired (2) | 2019.03.11 |
[Spring] Spring boot job chain 예제 (0) | 2019.03.11 |