[SPRING] JSP에서 스프링 빈을 자동으로 정리하는 가장 깨끗한 방법은 무엇입니까?
SPRINGJSP에서 스프링 빈을 자동으로 정리하는 가장 깨끗한 방법은 무엇입니까?
우리는 현재 프론트 용 프레임 워크없이 JSP 만 사용하는 이전 웹 애플리케이션에 몇 가지 새로운 기능을 추가하고 있습니다. 최근에 Spring을 추가했으며 수정 된 JSP에서 bean을 autowire하고 SpringMVC, Struts2 또는 Tapestry5를 사용하기 위해 모든 것을 다시 작성하지는 않습니다.
우리는 타입에 의한 autowiring을 사용하고 있기 때문에 이전에 웹 애플리케이션 컨텍스트 ( "wap")를 얻는 동안 JSP에서 다음과 같은 코드를 얻습니다.
MyDao myDao = (MyDao) wap.getBeansOfType(MyDao.class).values().toArray()[0];
그러한 코드를 사용하지 않고 대신 @Autowired 주석을 사용하여 비즈니스 bean 에서처럼 자동으로 JSP에 bean을 자동 삽입합니다.
실제로 JSP에서 빈을 주입하는 가장 깨끗한 방법을 찾고 있습니다. 너는 무엇을 사용하니?
해결법
-
==============================
1.Spring 컨텍스트 Exposing HttpServletRequest를 사용할 수있다.
Spring 컨텍스트 Exposing HttpServletRequest를 사용할 수있다.
이렇게하려면 컨트롤러 코드가 ContextExposingHttpServletRequest에서 원래 HttpServletRequest를 래핑 한 다음이를 JSP로 전달해야합니다. 특정 명명 된 Bean 또는 컨텍스트의 모든 Bean을 노출 할 수 있습니다.
물론 이것은 JSP에서 컨트롤러 코드로 문제를 옮기는 것일뿐입니다.하지만 이는 관리하기 쉬운 문제 일 것입니다.
-
==============================
2.jsp와 서블릿 모두 서블릿 conainer에 의해 인스턴스화되기 때문에 @Autowired를 직접 사용할 수 없습니다. 따라서 스프링 컨텍스트의 일부가 아니므로 종속성이 주입되지 않습니다.
jsp와 서블릿 모두 서블릿 conainer에 의해 인스턴스화되기 때문에 @Autowired를 직접 사용할 수 없습니다. 따라서 스프링 컨텍스트의 일부가 아니므로 종속성이 주입되지 않습니다.
할 수있는 일 :
또 다른 방법은 서블릿을 현재 컨텍스트의 일부로 수동으로 만드는 것입니다. JSP 및 서블릿 모두에서 가능합니다.
public void init() { WebApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(getServletContext()); AutowireCapableBeanFactory bf = ctx.getAutowireCapableBeanFactory(); bf.autowireBean(this); }
그러면 @Autowired 주석이 달린 종속성이 해결됩니다.
이제 서블릿 컨테이너가 하나의 서블릿 클래스 인스턴스 만 사용해야하는지 여부는 확실하지 않습니다. 그렇지 않다면 위의 코드를 종속성 (getDao ())에 대한 getter-method에 넣고 @Autowired 속성이 null 인 경우 (즉, 컨테이너에서 다른 서블릿 클래스 인스턴스를 사용하는 경우) - 위의 작업.
즉, 웹 프레임 워크 (목록에있는 웹 프레임 워크)를 사용하는 것이 좋습니다. JSP로 논리를 갖는 것은 완전히 잘못되어, 지원하기가 어렵고, 읽기가 어렵습니다.
-
==============================
3.jspInit () 메서드를 재정의하고 Autowiring 지원을 추가하는 방법은 무엇입니까?
jspInit () 메서드를 재정의하고 Autowiring 지원을 추가하는 방법은 무엇입니까?
<%@ page import="com.example.ExampleService"%> <%@ page import="org.springframework.beans.factory.annotation.Value"%> <%@ page import="org.springframework.beans.factory.annotation.Autowired"%> <%@ page import="org.springframework.web.context.support.SpringBeanAutowiringSupport"%> <%! public void jspInit() { SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext()); } @Value("${example.property}") private String someField; @Autowired private ExampleService exampleService; %> <% final Object data = exampleService.getSomething(someField); %>
-
==============================
4.JSP에 종속성을 주입 할 수있는 확실한 방법이 있는지 의심 스럽습니다.
JSP에 종속성을 주입 할 수있는 확실한 방법이 있는지 의심 스럽습니다.
제 생각에는 SpringMVC 나 인용 한 대안 중 하나를 사용하여 JSP에서 비즈니스 로직을 가져 오기 위해 코드를 리팩토링하는 것입니다.
주입 된 bean을 속성으로 사용하여 JSP에 요청을 전달하는 최소한의 컨트롤러로 시작하십시오. @ skaffman의 대답은이를 수행하는 한 가지 방법을 제공하거나 더 선택적으로 할 수 있습니다. 그런 다음 코드를 점진적으로 JSP에서 컨트롤러로 마이그레이션하십시오.
from https://stackoverflow.com/questions/2139121/what-is-the-cleanest-way-to-autowire-spring-beans-in-a-jsp by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 보안 지원되지 않는 구성 속성 (0) | 2019.03.22 |
---|---|
[SPRING] 점프 나머지 템플릿 URL 인코딩 (0) | 2019.03.22 |
[SPRING] RestTemplate GET 응답이 XML에 있어야 할 때 JSON에 있어야하는 이유는 무엇입니까? (0) | 2019.03.22 |
[SPRING] 비활성 시간이 지나면 연결이 중단됩니다. (0) | 2019.03.22 |
[SPRING] Spring Security 커스텀 인증 실패 핸들러가 매개 변수로 리디렉션 (0) | 2019.03.22 |