ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Bean
    STUDY/백엔드 2021. 1. 5. 18:43

    Bean이란?

    - 스프링 IoC 컨테이너에 의해서 인스턴스화되어 조립되거나 관리되는 객체를 말한다.

    - 스프링부트의 경우 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 필요한 빈들을 등록하고 필요한 곳에서 의존관계 주입을 통해 사용하는 것이 일반적이다.

     

    - Bean 등록

     

    1. xml 설정 파일에 등록

    <bean id="aaa" class="com.example.aaa.AAA">
        <property name="prop"></property>
    </bean>

     

    2. Annotation을 이용한 등록(class를 bean으로 등록)

    // @Component
    // @Service
    // @Controller
    @Repository
    public interface HelloWorldMapper { HelloWorld selectHelloWorld(); }

    ※ Controller, Service, Repository는 Component을 상속받는다. 해당 어노테이션으로 등록된 클래스들은 스프링 컨테이너에 의해 자동으로 생성되어 스프링 빈으로 등록된다.

    @Component 컴포넌트를 나타내는 일반적인 스테리오 타입으로 태그와 동일한 역할을 함
    @Repository 퍼시스턴스 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스
    @Service 서비스 레이어, 비지니스 로직을 가진 클래스
    @Controller 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스

     

    3. 자바코드로 bean 등록하기

    @Configuration
    public class ConfigurationBeanFactory {        
        @Bean    
        public HelloWorld helloWorld() {
            return new HelloWorld();    
        }        
     }

    → 이미 만들어진 객체를 bean으로 등록하는 것

    → 클래스 레벨에서는 @Configuration을 붙이고, 메서드 레벨에서는 @Bean Annotation을 붙인다. 메서드명이 각각 bean의 이름이 된다. 리턴되는 객체를 스프링 컨테이너가 빈으로 활용한다.

     

     

    ◎ 빈 의존관계 주입 Annotation

    @Autowired 정밀한 의존관계 주입이 필요한 경우에 유용.
    @Autowired는 프로퍼티, setter 메서드, 생성자, 일반 메서드에 적용 가능.
    의존하는 객체를 주입할 때 주로 Type을 이용
    @Resource 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용
    @Resource는 poperty, setter 메서드에 적용 가능
    의존하는 객체를 주입할 때 주로 Name을 이용
    @Value 단순한 값을 주입할 때 사용되는 annotation.
    @Value(“Spring”)은 <property.. value="Spring" />와 동일한 역할
    @Qualifier @Qualifier는 @Autowired annotation과 같이 사용.
    @Autowired는 타입으로 찾아서 주입하므로, 동일 타입의 Bean 객체가 여러 개 존재할 때 특정 Bean을 찾기 위해 사용

     

    • 필드 주입
    @Controller
    public class HelloWorldApiController {    
        @Autowired    
        private HelloWorldService helloWorldService;
    }

     

    • 생성자 주입
    @Controller
    public class HelloWorldApiController {    
        private HelloWorldService helloWorldService;     
       
        @Autowired    
        public HelloWorldApiController(HelloWorldService helloWorldService) {        
            this.helloWorldService = helloWorldService;    
        }
    }

    Spring 4.3부터는 클래스의 생성자가 하나이고 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 @Autowired를 생략할 수 있다.

     

    • Setter 주입
    @Controller
    public class HelloWorldApiController {    
        private HelloWorldService helloWorldService;     

        @Autowired    
        public void setHelloWorldService(HelloWorldService helloWorldService) {        
            this.helloWorldService = helloWorldService;    
        }
    }

     

    출처

    atoz-develop.tistory.com/entry/Spring-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85DI-Dependency-Injection%EC%9D%98-%EC%84%B8%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95

    dinfree.com/blog/2019/02/10/spring-2.html

    doohong.github.io/2019/01/09/Spring-bean/

    'STUDY > 백엔드' 카테고리의 다른 글

    @Mock, @MockBean  (0) 2021.02.03
    @ControllerAdvice / @RestControllerAdvice  (0) 2021.02.03
    Mybatis  (0) 2020.12.31
    Server Log  (0) 2020.12.28
    Apache Spring boot(내부 tomcat) 연동  (0) 2020.12.24
Designed by Tistory.