스프링 처음배울때 부터 설명은 들었는데 전혀 제대로 써먹지 못했었으나 경력이 조금 쌓이고 여러가지 프로젝트를 하다보니 왜 이런 개념을 배우고 써야하는지 이해가 조금은 되는것 같아서 정리해봄.
"내가 이거 쓸건데 매번 관리하기 너무 귀찮다. Spring이 관리좀 해줘 난 그냥쓰기만 할게"로 이해했다.
spring-petclinic프로젝트 OwnerController에 가면
private final OwnerRepository owners;
public OwnerController(OwnerRepository clinicService) {
this.owners = clinicService;
}
이런 부분이 보일것이다.
원래대로 OwnerRepository를 사용하려면 아래와 같이 선언해서 사용해야하지만
private OwnerRepository owners = new OwnerRepository();
이럴경우 매번 사용할때마다 생성을 해줘야 할 뿐만아니라 의존성이 매우 커지기때문에 OwnerRepository하나 수정하면 new로 생성해서 사용중인 메서드를 모두 체크를 해줘야한다는 불편함이 생긴다.
또한 테스트시
class OwnerControllerTest {
@Test
public void create() {
OwnerRepository owners = new OwnerRepository();
OwnerController cont = new OwnerController(owners); //owners의 의존성을 주입
}
}
주입으로 편리하게 테스트가 가능하게 할수있다.
이전에는 IOC컨테이너를 사용할때 ApplicationContext 파일에서 Bean설정을 해주었으나
SpringBoot를 사용하면서 부터는 저 파일을 볼일은 거의 없는듯함.
얘가 빈인지 아닌지는 인텔리j에서는 쉽게 파악이 가능하다.
빨간색 표시부분처럼 저런 표시가 있으면 Bean으로 처리되어 IOC컨테이너에 등록됨.
빈은 스프링 IOC컨테이너가 관리하는 객체이며
Component Scanning을 통해
@Component가 선언되어 있는것을 빈으로 등록한다.
또한
@Repository
@Service
@Controller
경우에도 해당 어노테이션을 들어가보면 아래와 같이 @Component가 이미 선언되어있음을 알수 있다.
빈을 사용하는 방법은 아래처럼 PetClinicApplication 파일에서 @Bean을 등록 한 후
@SpringBootApplication
public class PetClinicApplication {
// bean이라는 메서드를 정의할때는 @Configuration이라는 어노테이션 하위에서 작성을 해야한다.
// @SpriingBootApplication의 경우 @Configuration을 가지고있다.
@Bean
public String ridiss() {
return "ridiss";
}
public static void main(String[] args) {
SpringApplication.run(PetClinicApplication.class, args);
}
}
SampleController클래스를 생성해서
@RestController
public class SampleController {
@Autowired
String ridiss;
@GetMapping("/context")
public String context() {
return "hello " + ridiss;
}
}
localhost:8080/context를 호출하면
이렇게 호출된 것을 확인할 수 있다.
현재는 @Autowired는 거의 쓰지 않는 추세이며 생성자를 통해 주입하거나
lombok에 있는 @RequiredArgsConstructor 통해 사용을 많이한다.
Spring Security 6 변경점 (0) | 2023.01.25 |
---|---|
SPRING-Security SessionManagement(세션 관리 기능) (0) | 2023.01.23 |
@Component, @Configuration 차이 (0) | 2021.08.04 |
[JPA] Page, nativeQuery사용 (0) | 2021.07.13 |
JPA 양방향 매핑시 주의점 (0) | 2021.05.24 |