카테고리 없음

Spring Boot 웹 Java 구성이 작동하지 않습니다.

기록만이살길 2021. 2. 27. 08:26
반응형

Spring Boot 웹 Java 구성이 작동하지 않습니다.

1. 질문(문제점):

저는 Spring으로 시작하여 Thymeleaf 템플릿, JPA 및 Mysql을 사용하여 기본 Spring 부트 웹 앱을 만들었습니다.

자동 연결을 사용하고 모든 클래스에 주석을 달면 모든 것이 작동합니다. 다음은 작업 코드의 예입니다.

@Component 주석이있는 간단한 제품 클래스
@Component 주석이있는 간단한 제품 클래스

@service 어노테이션이있는 간단한 DAO 클래스
@service 어노테이션이있는 간단한 DAO 클래스

@Autowired 주석이있는 기본 컨트롤러를 사용하여 DAO 인스턴스를 가져옵니다.
@Autowired 주석이있는 기본 컨트롤러를 사용하여 DAO 인스턴스를 가져옵니다.

그래서 get 메소드를 호출하면 제품 목록을 볼 수 있습니다. 2 개의 제품이 표시됩니다.
2 개의 제품이 표시됨

이제 Java 구성으로 전환하면 작동이 중지됩니다. 주석을 주석 처리하고 새 Java 구성 파일을 추가했습니다.

@Autowiring 주석도 컨트롤러에서 제거되었습니다.
@Autowiring 주석도 컨트롤러에서 제거되었습니다.

@Configuration이있는 Java 클래스를 추가했습니다. 구성 파일을 참조하십시오.
구성 파일

컨텍스트가 빈을로드했는지 확인하기 위해 run 메서드에서 반환 한 구성 가능한 컨텍스트를 가져와 빈이로드되었는지 확인했습니다.

DAO 빈을 가져오고 메소드를 호출하여 제품 라인 항목을 가져옵니다.
DAO 빈을 가져오고 메소드를 호출하여 제품 라인 항목을 가져옵니다.

이것은 또한 객체가 null이 아님을 알 수 있듯이 작동합니다. 또한 응용 프로그램이 시작된 직후 출력에서 ​​제품 수를 얻을 수 있습니다.

여기까지 모든 것이 정상이며 응용 프로그램이 시작되었습니다. 하지만 이제 URL에 액세스하면 오류가 발생합니다.

로그보기
로그보기

요약 이 예제는 Spring을 이해하기 위해서만 수행되었으며 적절한 DDD 관행을 따르지 않습니다.

단계 요약은 다음과 같습니다. 문제는 4 (b) 단계에 있습니다.

  1. DAO는 2 개의 Product 인스턴스를 만들고 목록에 넣고 반환합니다.
  2. DAO는 컨트롤러에 주입됩니다. 컨트롤러는 DAO에서 getproducts ()를 호출하고 제품 목록을 반환합니다.
  3. 모든 것이 @Autowiring과 결합 된 구성 요소 및 서비스 주석과 함께 작동합니다.
  4. Java 구성을 사용할 때 문제가 발생합니다. (a) 응용 프로그램 시작 후 컨텍스트를 얻고 빈이로드되었는지 확인합니다. (주 응용 프로그램에서이 작업을 수행하고 있습니다.) (b) URL을 누르고 컨트롤러가 DAO에서 메서드를 호출하려고 할 때만 문제가 발생합니다.

2. 해결방안:

HomeController다음과 같이 생성자를 선언하십시오.

@Controller
public class HomeController{

   private final ProductDao dao;

    public HomeController(ProductDao dao){
       this.dao = dao;
    }
 
  //... rest of the code
}

참조 : Spring Boot Reference Documentation- Spring Beans and Dependency Injection

빈에 생성자가 하나 있으면 @Autowired를 생략 할 수 있습니다.

참고 : 참고 용으로 이미지 대신 실제 코드를 공유하십시오.

65783866
반응형