방법1. 수동 빈 등록방법
@Configuration은 스프링 컨테이너에 bean객체를 싱글톤방식으로 등록해준다.
기본으로 싱글톤 방식을 제공하고 필요에 따라 설정할 수 있다.
@Configuration @Bean을 사용하여 빈을 스프링 컨테이너에 등록하였다.
@Configuration
public class BeanCreate {
@Bean
public String bean1(){
return new beanImpl().bean1();
}
@Bean
public String bean2(){
return new beanImpl().bean1();
}
@Bean
public String bean3(){
return new beanImpl().bean1();
}
@Bean
public String bean4(){
return new beanImpl().bean2();
}
@Bean
public String bean5(){
return new beanImpl().bean2();
}
}
방법2. 자동 빈 등록방법
@Componet 애노테이션을 사용하면 스프링이 자동으로 bean을 등록해준다.
하지만 아래 코드를 보면 @Componet를 찾아 볼 수가 없다.
그 이유는 @Service 애노테이션을 들어가보면 @Component를 포함하고 있기 때문이다.
이런한 종류의 애노테이션이 존재한다 @Controller, @Repository @Service 등등은 내부에 @Component를 포함하여
자동으로 컨테이너에 bean을 등록해준다
@Service
public class beanImpl implements bean{
@Override
public String bean1(){
System.out.println("bean1");
return "bean1";
}
@Override
public String bean2() {
System.out.println("bean2");
return "bean2";
}
@Override
public String bean3() {
return "bean3";
}
@Override
public String bean4() {
return "bean4";
}
@Override
public String bean5() {
return "bean5";
}
}
/**
* Indicates that an annotated class is a "Service", originally defined by Domain-Driven
* Design (Evans, 2003) as "an operation offered as an interface that stands alone in the
* model, with no encapsulated state."
*
* <p>May also indicate that a class is a "Business Service Facade" (in the Core J2EE
* patterns sense), or something similar. This annotation is a general-purpose stereotype
* and individual teams may narrow their semantics and use as appropriate.
*
* <p>This annotation serves as a specialization of {@link Component @Component},
* allowing for implementation classes to be autodetected through classpath scanning.
*
* @author Juergen Hoeller
* @since 2.5
* @see Component
* @see Repository
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any (or empty String otherwise)
*/
@AliasFor(annotation = Component.class)
String value() default "";
}
싱글톤 패턴
스프링은 기본적으로 bean을 싱글톤으로 등록한다.
싱글톤은 단 하나의 객체를 생성하고 그 객체를 공유한다.
그 객체가 필요한 어떤 요청이든 단 하나의 객체 주소를 참조하여 사용한다.
그렇기 때문에 메모리에 불필요한 낭비를 막을 수 있다.
등록된 bean을 조회해 보면 아래와 같이 중복 없이 생성 된 것을 볼 수 있다.
이것을 싱글톤 방식으로 객체를 중복 생성 하지않고 객체를 공유하여 사용한다
'Spring' 카테고리의 다른 글
@PostConstruct와 @Value 그리고 bean life cycle 관하여 (0) | 2023.04.03 |
---|---|
@Data,@Getter,@Setter 롬북(LOMBOK)의 기능 (0) | 2023.02.19 |
의존성주입(DI) 4가지 방법 및 생성자주입을 써야하는 이유 (0) | 2023.02.19 |
@bean (0) | 2023.02.05 |