Published 2022. 5. 26. 15:02

1. @RequiredArgsConstructor 어노테이션을 사용한 생성자 주입 방법

  • 생성자 주입의 단점은 위의 Constructor(생성자) 코드처럼 생성자를 만들기 번거옵다는 것, 이를 보안하기 위해 롬복을 사용하여 간단한 방법으로 생성자 주입을 할 수 있다.
  • final이 붙거나 @NotNull이 붙은 필드의 생성자를 자동 생성해주는 롬봄 어노테이션

2. 의존성 주입의 종류

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;
        }
        ...

'Spring > Annotation' 카테고리의 다른 글

@Configuration  (0) 2022.06.01
@RequestParam  (0) 2022.05.30
@Controller, @RestController 비교  (0) 2022.05.30
@Pathvariable  (0) 2022.05.27
@Data  (0) 2022.05.27
복사했습니다!