Bean 등록 ⇒ "이 클래스 만들어놨으니, 객체 만들어서 컨테이너에 넣고 관리해줘"
2가지 방법이 있다.
아래와 같이 House Class를 만들고 Bean 등록을 해보았다.
@Component
public class House {
private String name;
public House() {
this.name = "A House";
System.out.println("집이 생성되었다");
}
public String getName() {
return name;
}
}
@Component 를 사용하면 알아서 Bean 등록을 해준다. 다음은 빈 등록 후 실행 시킨 결과이다.

먼저 WebApplicationContext (컨테이너)가 생성된 후 Bean 객체가 생성되어 “생성되었다”가 출력 되는 것을 볼 수 있다.
즉, 객체를 생성하지 않고 Bean 등록만 해도 객체가 알아서 생성 된 것을 볼 수 있다.
💡Tip
1. SpringBoot에서는 xml파일로 Bean 관리를 하던 것을 @(Annotation)으로 대체하였다.
2. default 설정은 Application 보다 상위 패키지는 Component Scan을 하지않는다.
Bean을 생성했다면 이제 사용해보자.
Person
@Component
public class Person {
private House house;
public Person(House house) {
this.house = house;
System.out.println(house.getName() + " 라는 집을 샀다");
}
}
여기서 실행을 시키면 Person에 House를 넣지도 않았는데 알아서 “A House”를 출력하는 것을 볼 수 있다.
어떻게 내가 등록한 객체를 주입 시킨걸까?

위의 예제에서 사용한 방법이다.
@Autowired // 얘가 생략되었던 것
public Person(House house) {
this.house = house;
System.out.println(house.getName() + " 라는 집을 샀다");
}
생성자 위에 @Autowired 를 붙여 선언하며
생성자를 사용하는 방법이 좋은 이유는 필수적으로 사용해야하는 의존성 없이는 객체를 만들지 못하도록 강제할 수 있기 때문이다. (생성자가 실행되어야 객체가 생성되니깐.)
@Autowired 는 생략이 가능하다. (생성자가 하나 이상이면 명시 필수)💡그럼 어떻게 알맞는 객체를 찾아서 넣어주는걸까?
1. 컨테이너에 등록된 빈의 타입을 통해 찾는다. ⇒ 만약 인터페이스라면 타입이 겹치지 않을까?
2. 그럼 등록된 Bean 이름으로 직접 찾자!
@Component
public class Person{
@Autowired
private House house;
}
@Component
public class Person{
private House house;
public void setHouse(House house){
this.house = house; //setter로 주입
}
}
set~(){} 메서드를 통해 주입하는 것
생성자 주입을 사용하자!