Bean

CREE·2023년 8월 31일
0

Spring

목록 보기
2/4
post-thumbnail

정의

IOC 컨테이너가 관리하는 객체

빈을 등록하는 방법

1. component scan

@Component 와 그 하위 어노테이션을 가지고 있는 클래스를 찾아 자동으로 빈으로 등록하는 과정

사용 가능한 어노테이션

@Component : 컴포넌트 스캔에서 사용
@Controller : 스프링 MVC 컨트롤러에서 사용
@Service : 스프링 비즈니스 로직에서 사용
@Repository : 스프링 데이터 접근 계층에서 사용
@Configuration : 스프링 설정 정보에서 사용

해당 어노테이션들이 있는 클래스들을 자동으로 등록해준다.

2. 수동등록

수동 등록에는 2가지 정도의 방법이 있다.

@Configuration 주석이 있는 클래스 안에 @Bean이 있는 메소드를 넣는것으로 빈을 등록할수있다.

@Configuration
public class ApplicationConfig {

  @Bean
  public MyService myService(MyRepository myRepository) {
    return new MyService(myRepository);
  }
  
  @Bean
  public MyRepository myRepository() {
    return new MyRepository
  }
  
}

resource 디랙토리 하단에 application.xml을 생성해 <beans>엘리먼트 내부에 <bean>엘리먼트를 추가해 빈을 추가할수 있다.

<?xml version="1.0" encoding="UTF-8" ?>
<beans ...>

  <bean id="MyService"
        class="com.example.my.MyService">
    <property name="myRepository"
              ref="myRepository"/>
  </bean>

  <bean id="MyRepository"
        class="com.example.my.MyRepository">
  </bean>

</beans>

빈을 사용하는법

빈은 IOC에서 자동으로 의존성을 주입될때 사용된다.
(IOC컨테이너가 관리하는 객체가 빈이기 때문)

@Autowired 혹은 @Inject를 통해 사용하는법

@Autowired@Inject는 거의 유사하게 동작하지만 @Autowired 은 스프링에 의존적이라는 차이점이 있다.

@Autowired를 이용한 의존성 주입의 방법은 3가지가 있다.

필드 주입

class OwnerController(){
  //빈을 받아오기
	@Autowired
	private OwnerRepository repo;
  	public OwnerContorller(){}
}

생성자 주입

class OwnerController(){
	private OwnerRepository repo;
     //빈을 받아오기
	@Autowired
	public OwnerContorller(OwnerRepository repo){
  	this.repo = repo;
  }
}

Setter 주입

class OwnerController(){
	private OwnerRepository repo;
 	public OwnerContorller(){}
	//빈을 받아오기
	@Autowired
	public void setRepo(OwnerRepository repo){
		this.repo = repo;
	}
}

getBean()을 통해 사용하는법

OwnerRepository repo = ctx.getBean("ownerRepository",OwnerRepository.class);

다음과 같이 getBean() 메소드는 첫번째 인자로는 빈의 이름, 두번째 인자로는 빈의 클래스를 받는다.

빈의 이름은 클래스, 혹은 지정한 메소드의 첫 문자를 소문자로 바꾼것으로 지정된다.

profile
이리저리 컴공과

0개의 댓글