Spring 공식문서에 의하면,
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC (Inversion of Control) container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container.
-> Spring IoC에 의해 관리되며, 애플리케이션의 중추를 이루는 객체
📍 Spring IoC (Inversion of Control)?
A process in which an object defines its dependencies without creating them
-> 어떤 객체가 의존성을 직접 생성하지 않고도 정의할 수 있는 과정
Bean을 등록할 때는 싱글톤 (유일하게 하나만 등록해서 공유함)
-> 같은 Bean이면 모두 같은 인스턴스
@SpringBootApplication
public class BasicBeansApplication {
public static void main(String[] args) {
SpringApplication.run(BasicBeansApplication.class, args);
// 생성되는 모든 Bean들을 보고 싶다면 아래처럼
// ApplicationContext apc = SpringApplication.run(BasicBeansApplication.class, args);
// for (String s : apc.getBeanDefinitionNames()) {
// System.out.pringln(s);
// }
}
}
결과 화면은 아래와 같다.
@Component
public class Customer {
private String name;
private Address address;
public Customer(String name, Address, address) {
this.name = name;
this.address = address;
}
// getter, setter 생략
}
@SpringBootApplication
public class BasicBeansApplication {
public static void main(String[] args) {
SpringApplication.run(BasicBeansApplication.class, args);
}
}
// 이렇게 Bean으로 등록을 해놓으면, 원할 때에 String이 초기화됨
@Bean
public String getName() {
return "Jeanine";
}
📍 아래와 같이 @Service, @Repository 없이 직접 Bean 등록을 할 수 있다.
(Config 파일은 @SpringBootApplication이 정의되어 있는 파일과 같은 위치에 생성)
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Component(value="addressbean")
public class Address {
}
@Component
public class Customer {
private String name;
@Qualifier("addressbean")
@Autowired
private Address address;
// 아래는 생략
}
Spring에서 Bean이란 Spring 컨테이너에 의해 관리되는 클래스의 인스턴스
참고: