Class DefaultSecurityService

java.lang.Object
com.easydesk.security.DefaultSecurityService
All Implemented Interfaces:
SecurityService

@Service("defaultSecurityService") public class DefaultSecurityService extends Object implements SecurityService
Spring bean 으로 등록되는 기본 SecurityService 구현.

예전: Map<String,String> configuredAdaptors 를 받아서 Class.forName(className).getDeclaredConstructor().newInstance() 로 각 Manager 를 리플렉션으로 생성 -> UserManagerAdaptor 처럼 생성자에 의존성 (CredentialService 등)이 필요한 adaptor 는 더 이상 이 방식으로 만들 수 없음.

이후: 각 XxxManagerAdaptor 를 스프링 빈(@Component)으로 두고, DefaultSecurityService 는 그 인터페이스들을 생성자 주입만 받는다. -> 어떤 adaptor 가 어떤 의존성을 갖든(CredentialService 든 뭐든) 스프링 컨테이너가 알아서 만들어주므로 DefaultSecurityService 는 더 이상 "어떻게 만들지" 를 몰라도 된다 (책임 분리).

이 클래스 자체도 @Service 로 스프링 빈이 되므로, 컨슈머(데모/테스트)는 @ComponentScan(basePackages = "com.easydesk.security") 만 켜주면 SecurityService 타입 빈이 정확히 하나(이 클래스) 생긴다. 컨슈머가 별도로 new DefaultSecurityService(...) 를 만들거나 @Bean 등록을 하면 안 된다 (그러면 SecurityServiceConfig 충돌 문제가 재발함 - ConflictingBeanDefinitionException 이 아니라, 이번엔 SecurityService 빈 후보가 2개가 되어 @Autowired 지점에서 NoUniqueBeanDefinitionException 이 남).

Author:
Youngho Cho