<aside> 1️⃣ Bean이란
</aside>
@Component
public class MyBean {
private String name;
public MyBean() {
this.name = "Default Name";
}
}
MyBean
클래스는 @Component
어노테이션으로 표시되어있다.
이는 MyBean
클래스가 스프링의 빈으로 등록되어야 함을 나타낸다. 즉, MyBean
클래스의 인스턴스는 스프링 컨테이너에 의해 생성되고 관리되게 된다.public class MyBeanUser {
private MyBean myBean;
// 생성자가 1개일때는 @Autowired 생략해도 된다.
public MyBeanUser(MyBean myBean) {
this.myBean = myBean;
}
public void printName() {
System.out.println("Name: " + myBean.getName());
}
}
MyBeanUser
클래스는 **MyBean
을 의존성으로 가지고 있다. 이 의존성은 생성자 주입방식을 통해서 주입하게 된다.
MyBeanUser
클래스는 printName()
메서드를 통해 주입된MyBean
**을 사용해서 이름을 출력한다.<aside> 2️⃣ Component란
</aside>
@Component
**는 스프링 프레임워크에서 사용되는 어노테이션 중 하나로, 해당 클래스를 스프링의 빈으로 등록하는 데 사용된다.
@Component
어노테이션은 일반적인 스프링 빈으로 사용될 수 있는 클래스 상단에 적어서 사용한다.
@Component
어노테이션은 @Controller
, @Service
, @Repository
등 다른 특수한 용도를 가진 어노테이션들의 메타 어노테이션이기도 하다.
따라서, @Component
어노테이션을 사용하여 클래스를 빈으로 등록하면, 해당 클래스는 일반적인 컴포넌트로 사용되거나, 특수한 용도의 컴포넌트로 사용될 수 있다.@Component
public class MyComponent {
// ...
}
MyComponent
클래스에 @Component
어노테이션을 추가했다. 이렇게 하면 MyComponent
클래스가 스프링의 빈으로 등록된다.
스프링 컨테이너는 @ComponentScan
어노테이션을 통해 스캔할 패키지를 지정 후 @Component
어노테이션이 달린 클래스를 스캔후 인스턴스를 생성하여 관리한다.
이렇게 등록된 빈은 다른 빈에서 의존성 주입을 통해 사용할 수 있다.@Component
어노테이션은 value
속성을 통해 빈의 이름을 지정할 수 있다.
기본적으로는 클래스 이름의 첫 글자를 소문자로 변환한 이름이 빈의 이름으로 사용된다.
예를 들어, MyComponent
클래스의 빈 이름은 "myComponent"가 된다. 하지만, **@Component("customName")
**과 같이 명시적으로 이름을 지정할 수도 있다.@Component("customName")
public class MyComponent {
// ...
}
<aside>
⭐ 이렇게 @Component
어노테이션을 사용하여 클래스를 스프링 빈으로 등록하면, 스프링 컨테이너는 해당 클래스의 인스턴스를 생성하고 관리하여 애플리케이션에서 사용할 수 있게 된다.
</aside>
<aside> 3️⃣ ComponentScan이란
</aside>
@ComponentScan
**은 스프링에서 사용되는 어노테이션으로, 지정된 패키지에서 컴포넌트를 스캔하여 자동으로 Bean으로 등록하는 기능을 수행한다.
@ComponentScan
어노테이션은 주로 스프링 컨텍스트가 Component를 찾을 수 있도록 지시하는 데 사용된다.