본문 바로가기

Spring/공부공부

[Spring] @ 어노테이션

 

https://phyho.tistory.com/101

 

20230719 _[33일차]_01. Spring 게시판 수정 & 삭제 버튼 생성

http://gofile.me/63QAy/vS8wbABZZ Connecting... 어디서나 모든 장치에서 파일을 액세스, 공유 및 공동 작업할 수 있습니다. 전체 데이터 소유권을 가져오며 구독 요금이 없습니다. {0}자세한 정보{1} 원활한

phyho.tistory.com


https://programmingrecoding.tistory.com/13

 

@Component 어노테이션

@Component 어노테이션을 이용하면 Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다. 빈 등록자체를 빈 클래스 자체에다가 할 수 있다는 의미이다. @Component 어노테이션은 기본적으

programmingrecoding.tistory.com


@Component 

스프링에서 관리하는 객체임을 표시하기 위해 사용하는 어노테이션.

 


 

@Configuration 

스프링에서 Bean을 수동으로 등록하기 위해 사용하는 어노테이션.

class 위에 선언하고(설정 클래스로 지정), @Bean을 사용해 수동으로 빈을 등록.

* 설정 클래스 : 스프링 컨테이너가 Bean 정의를 읽어들일 때 사용하는 클래스.

@Bean

메소드 위에 선언해서 반환 객체를 스프링 컨테이너의 Bean으로 등록. (메서드 이름이 Bean의 이름으로 사용.)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {
    
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

class MyBean {
    public void doSomething() {
        System.out.println("....");
    }
}

스프링 컨테이너가 @Configration이 붙은 클래스를 빈으로 등록해두고, @Bean이 있는 메소드를 찾아서 빈을 생성.

스프링 빈으로 등록된 다른 클래스 안에서 @Bean으로 등록해도 동작은 하지만, 

@Configuration 내부에서 @Bean을 사용해야 싱글톤(singleton)이 보장된다.

 

 

@Component

스프링에서 Bean을 자동으로 등록하기 위해 사용하는 어노테이션.

하위(메타) 어노테이션으로 @Configuration, @Controller, @Service, @Repository 등이 있음.

=> @Component의 모든 기능을 상속하고 추가적인 기능들이 들어간 어노테이션.

import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    
    public void doSomething() {
        System.out.println("......");
    }
}

 

@Autowired

이렇게 자동으로 해당 클래스의 인스턴스가 빈으로 등록이 되면, 이후 @Autowired 를 사용해서 의존성 주입.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyService {
    private final MyComponent myComponent;

    @Autowired
    public MyService(MyComponent myComponent) {
        this.myComponent = myComponent;
    }

    public void useMyComponent() {
        myComponent.doSomething();
    }
}

MyService 클래스가 @Autowired 를 사용해서 MyComponent 의 인스턴스를 MyService에 주입,

useMyComponent 메서드에서 MyComponent 의 메서드를 사용할 수 있다.