Back-end/Spring Boot

[Spring Boot] Spring Bean 생성, 주입 방법, @Controller

Bay Im 2024. 3. 31. 13:53
  • @SpringBootApplication
    • 3가지의 어노테이션을 합쳐놓은 어노테이션이다.
    • @ComponentScan
      • @Component가 붙은 클래스를 찾아서 Bean으로 등록한다.
    • @EnableAutoConfiguration
      • 스프링 프레임워크의 기본적인 기능을 활성화할 때 사용하는 어노테이션
    • @SpringBootConfiguration
      • @Configuration이 붙은 클래스 (웹 애플리케이션의 설정 정보를 담는 클래스)를 스프링 프레임워크의 설정 클래스로 등록한다.

 

  • Bean (빈)
    • 스프링 프레임워크에서 관리하는 자바 클래스 객체를 의미
    • 싱글톤이며 같은 이름의 빈은 선언 불가
    • 첫글자는 소문자
  • 클래스를 빈으로 만드는 어노테이션 2가지
    • @Bean
      • Config 클래스 안에서 사용되고, 주로 외부 라이브러리 사용 시 사용
    • @Component
      • 개발자가 직접 작성한 클래스에 주로 사용
      • 빈의 이름을 직접 지정할 수 있다.
        • @Component(”이름”)
  • 자바 빈을 생성하는 방법 2가지
    • @Confiration + @Bean
    • @Component + @Autowired - 추천 방법
      • 필드(멤버 변수) 주입
      • setter 주입
      • 생성자(constructor) 주입 (추천하는 방법)
  • 스프링 빈을 주입 받는 방법
    • 필드 주입
      •  		@Autowired
            private Member member1;
        
            @GetMapping("field")
            @ResponseBody
            public String field() {
                return "field() 호출됨 - " + member1.getName();
            }
    • setter 주입
      •   	private Member member3;
          	
            @Autowired
            public void setMember(Member member) {
                this.member3 = member;
            }
        
            @GetMapping("setter")
            @ResponseBody
            public String setter() {
                return "setter() 호출됨: " + member3.getName();
            }
    • 생성자(constructor) 주입 - 추천 방법
      • final 키워드 사용 가능 (객체 재할당 방지)
      • 생성자로서 미리 주입 받을 수 있다. (null safety 제공)
      • private final Member member4;
            
            @Autowired
            public MainController(Member member) {
                this.member4 = member;
            }
        
            @GetMapping("constructor")
            @ResponseBody
            public String constructor() {
                return "constructor() 호출됨: " + member4.getName();
            }

 

  • @Controller
    • HTTP 요청을 처리하는 컨트롤러 클래스에 붙인다.
    • GET/POST/PUT/DELETE 요청 등을 처리한다.
    • @ResponseBody
      • 응답을 문자열**(JSON)로 응답**한다는 의미
    • @Autowired
      • 스프링 빈을 필드로 주입할 때 작성
        • private Member member1;
      • 클래스를 멤버 변수로 선언하고 그위에 어노테이션 작성
728x90