모든 서비스에 싱글 톤 패턴을 사용하고 다른 서비스 및 웹 티어를 사용하는 서비스 내에서 ServiceName.getInstance()를 통해 모든 서비스에 액세스하는 레거시 애플리케이션이 있습니다. 저는 Spring을 사용하도록 프로젝트를 변환하려고합니다. getServiceA, getServiceB..etc 등의 메소드를 사용하여 ServiceProvider 싱글 톤 유틸리티 클래스를 생성하고 Spring 응용 프로그램 컨텍스트에서 Bean을 가져 오려고합니다. 아직 스프링을 사용하지 않고 다른 서비스를 사용하는 모든 서비스를 자동으로 변환 할 수 없기 때문에 웹 계층에서 ServiceProvider를 사용합니다. 이것은 좋은 해결책입니까?스프링 프레임 워크 추상화
저는 매우 간단한 웹 티어를 가지고 있으며 누군가가 최소한의 변경만으로 탄력을 줄 수있는 방법을 제안 할 수 있습니다. 시작시로드 된 컨트롤러에 대한 URL 맵이 있습니다. RequestDispatcher는 요청 url을 구문 분석하고 클래스별로 컨트롤러를 찾고 템플릿 메서드를 실행합니다 (기본 컨트롤러의 다양한 하위 클래스가 있지만 문제는 복잡하지 않습니다).
RequestDispatcher의 :
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int slashIndex = req.getRequestURL().lastIndexOf("/");
String path = req.getRequestURL().substring(slashIndex, req.getRequestURL().length());
ServiceURL url = urlMap.get(path);
ServiceProvider.getLog().info("Requested page: " + path);
if (url != null) {
try {
Utils.authenticate(req, resp);
grantAccess(req, url);
BaseServlet servlet = (BaseServlet)url.getClass().getClassLoader().loadClass(url.getClassName()).newInstance();
servlet.service(req, resp);
}
catch (AuthorizationException e) {
resp.getWriter().write(new ErrorModel("You are not authorized to perform the requested action.").getContent());
ServiceProvider.getAuthLog().info("auth", e);
}catch (SystemException e) {
내가, 구성 요소로 내 서블릿을 주석 패키지 자동 스캔 가진 생각 해요. ApplicationContext가 전체 클래스 이름으로 빈을 가져올 수 있습니까?
왜 이것이 좋은 해결책이라고 생각합니까? 그렇지 않습니다. – NINCOMPOOP
대안은 무엇입니까? – user979051