SpringBoot/졸과

@RequiredArgsConstructor

브리오 2024. 7. 16. 11:16

자바에선 특정 클래스를 사용하기 위해선 heap영역에 그 클래스를 올려야 하는데 일일이 작업하기 쉽지않다

그래서 IOC를 통해서 모든 클래스를 한번에 heap에 올리고 DI를 이용해서 각 클래스를 하나만 생성해서 관리한다

 

이때 DI는 Constructor(생성자),Setter,Field 타입이 있다

 

1. Constructor(생성자)

public  class  ExampleCase {
    
    private  final  ChocolateService  chocolateService;
    private  final  DrinkService  drinkService;
    
    @Autowired
    public ExampleCase(ChocolateService  chocolateService, DrinkService  drinkService) {
   	this.chocolateService = chocolateService;
   	this.drinkService = drinkService;
    }
}

2. Setter

public  class  ExampleCase{
    
    	private  ChocolateService  chocolateService;
    	private  DrinkService  drinkService;
    
    	@Autowired
    	public void  setChocolateService(ChocolateService  chocolateService){
    		this.chocolateService = chocolateService;
    	}
    
    	@Autowired
    	public void  setDrinkService(DrinkService  drinkService){
    		this.drinkService = drinkService;
    	}
    
    }

3.Field

public  class  ExampleCase{
    
    	@Autowired
    	private ChocolateService  chocolateService;
    
    	@Autowired
    	private DrinkService  drinkService;
    }

 

이렇게 하면 번거로우니까 롬복을 활용해서 간단하게 처리할 수 있다

 

@RequiredArgsConstructor 를 활용한 생성자 주입

    @Service
    @RequiredArgsConstructor
    public class BannerServiceImpl implements BannerService {
    
        private final BannerRepository bannerRepository;
    
        private final CommonFileUtils commonFileUtils;
        ...

@RequiredArgsConstructor를 사용하지 않으면 원래는 이렇게 생성자 주입을 해야한다

    @Service
    public class BannerServiceImpl implements BannerService {
    
        private BannerRepository bannerRepository;
    
        private CommonFileUtils commonFileUtils;
    
        @Autowired
        public BannerServiceImpl(BannerRepository bannerRepository, CommonFileUtils commonFileUtils) {
            this.bannerRepository = bannerRepository;
            this.commonFileUtils = commonFileUtils;
        }
        ...