해당 내용은 chat GPT에 질문하여 생성된 내용 입니다. 참고만 하시길.. 

Q : Spring 프레임워크에서 제어의 반전 개념과 그것이 어떻게 구현되는지 설명
A : 제어 반전(IoC)은 소프트웨어에서 더 나은 모듈화와 유연성을 허용하는 설계 패턴이다. 구성 요소가 종속성을 선언하도록 허용하고 실행 시 IoC 컨테이너가 종속성을 주입하도록 함으로써 프로그램의 전통적인 제어 흐름을 뒤집는 것을 포함한다. Spring 프레임워크는 메타데이터를 사용하여 빈이라고 하는 애플리케이션 개체의 인스턴스를 구성하고 관리하는 IoC 컨테이너의 예입니다. IoC 컨테이너를 사용하여 종속성을 관리함으로써 개별 구성요소 자체를 변경할 필요 없이 애플리케이션을 보다 쉽게 확장하고 수정할 수 있습니다.

 

ioc 관련 java class 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class OrderService {
    
    private final InventoryService inventoryService;
    
    @Autowired
    public OrderService(InventoryService inventoryService) {
        this.inventoryService = inventoryService;
    }
    
    public void placeOrder(String productId, int quantity) throws OutOfStockException {
        if (inventoryService.checkAvailability(productId, quantity)) {
            inventoryService.reserve(productId, quantity);
            // ... continue with order processing
        } else {
            throw new OutOfStockException(productId);
        } 
    }
}

InventoryService 클래스에 대한 종속성이 있는 OrderService 클래스가 있습니다. InventoryService는 OrderService의 인스턴스를 생성할 때 InventoryService의 인스턴스를 제공하도록 Spring IoC 컨테이너에 알리는 @Autowired 주석을 사용하여 OrderService에 주입됩니다.

OrderService는 InventoryService를 사용하여 제품의 가용성을 확인하고 재고가 있는 경우 예약합니다. 

IoC를 사용하면 OrderService는 InventoryService 자체의 인스턴스를 생성하거나 수명 주기를 관리할 필요가 없습니다. 

대신 이러한 책임을 처리하기 위해 Spring IoC 컨테이너에 의존합니다.

OrderService 클래스의 @Component 주석은 Spring IoC 컨테이너에게 이 클래스의 인스턴스를 빈으로 생성하고 관리하도록 지시합니다. Spring 프레임워크에서 Bean을 선언하는 방법 중 하나이다.

반응형

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

 

스프링부트에서 Swagger 를 사용하기 위해 pom.xml 에 dependency 추가하고 

<!-- Swagger 2 -->
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.9.2</version>
</dependency>
	
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.9.2</version>
</dependency>

루트패키지 하위에 SwaggerConfiguration 클래스 생성하고 

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

	@Bean
	public Docket api() {
		return new Docket(DocumentationType.SWAGGER_2)
				.apiInfo(apiInfo())
				.select()
				.apis(RequestHandlerSelectors.basePackage("루트.패키지")) // 패키지 범위 설정
				.paths(PathSelectors.any())
				.build();
	}

	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("API TEST with Swagger")
				.description("설명")
				.version("1.0.0")
				.build();
	}
}

실행했더니 오류가 났다... 하라는대로 했는데...

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

 

열심히 구글링 해보니깐, 스프링부트 버전 변경으로 인해 몇몇 라이브러리에서 오류가 발생한다고 한다

Spring boot 2.6버전 이후에 spring.mvc.pathmatch.matching-strategy 값이 ant_apth_matcher에서 path_pattern_parser로 변경되면서 몇몇 라이브러리에서 오류가 발생함

오류처리 방법은 간단하다. application.properties에 설정값 하나만 추가해주면 된다.

# application.properties 사용시
spring.mvc.pathmatch.matching-strategy=ant-path-matcher


# application.yml 사용시
spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

 

추가 해주고 다시 재실행!! 

이상없이 정상적으로 실행되는걸 확인할수 있다.

 

반응형

'개발 티끌 팁 > JAVA' 카테고리의 다른 글

스프링 제어 반전(Ioc) 개념  (0) 2023.02.14
자바 스프링 vo 객체 복사  (0) 2022.07.13

클래스간에 프로퍼티 복사
set으로 하나씩 하나씩 하기에는 귀찮음

스프링에서 제공하는 API 사용 하자

BeanUtils.copyProperties(source, target);
source : 원본 객체
target :  복사 대상 객체

BeanUtils.copyProperties(source, target, String ... ignoreProperites);
source : 원본 객체
target : 복사 대상 객체
ignoreProperities : 복사를 원하지 않는 프로퍼티명





반응형

+ Recent posts