빈
애플리케이션 컨텍스트가 생성하고 관리하는 객체
스프링이 제어권을 가지고 직접 만들과 관계를 부여하는 오브젝트
오브젝트 단위의 애플리케이션 컴포넌트이자 스프링 컨테이너가 생성, 관계설정,사용 등을 제어해주는 제어의 역전 개념이 사용된 오브젝트
빈 팩토리
스프링의 IoC를 담당하는 핵심 컨테이너
빈의 생성과 관계설정과 같은 제어를 담당하는 IOC 오브젝트
빈 팩토리보다는 확장된 애플리케이션 컨택스트를 주로 사용하긴 하는데 두 용어를 혼용해서 사용하기도 한다.
애플리케이션
애플리케이션의 컨택스트와 그 설정 정보를 따라서 만들어지고 구성된다.
애플리케이션 컨텍스트=IoC 컨테이너=스프링 컨테이너{=빈 팩토리}
빈 팩토리를 확장한 IoC 컨테이너
빈을 등록,관리하는 기본적인 기능은 빈 팩토리와 동일하나 스프링이 제공하는 각종 부가 서비스를 추가로 제공해준다.
애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정 담당
별도의 정보를 참고해서 빈의 생성, 관계설정 등의 제어 작업 총괄
직접 정보들을 담고 있지는 않지만 별도로 설정 정보를 담고 있는 무엇인가(ex xml..)를 가져와 이를 활용하는 범용적인 IOC 엔진같은 것
@Configuration
빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식하도록하는 애노테이션
@Bean
오브젝트를 만들어주는 메소드라고 인식하도록하는 애노테이션
@Configuration
public class DaoFactory {
@Bean
public UserDao userDao() {
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker() {
return new DConnectionMaker();
}
}
위에서 만든 다오팩토리를 설정정보로 사용하는 애플리케이션 컨텍스트의 코드는 아래와 같다.
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException{
ApplicationContext context =
new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
}
}
getBean() 함수
애플리케이션 컨텍스트에 등록된 빈의 이름을 파라미터로 받는다.
@Bean 애노테이션이 붙은 메소드의 이름이 빈의 이름이 된다.
오브젝트 팩토리를 직접 사용 대신 애플리케이션 컨텍스트 사용시 장점
-클라이언트가 구체적인 팩토리 클래스를 알 필요가 없다.
애플리케이션 컨텍스트를 사용하면 오브젝트 팩토리가 아무리 많아져도 이를 알거나 직접 사용할 필요없다.
-종합 IoC 서비스를 제공해준다.
오브젝트에 대한 후처리, 정보의 조합 등 오브젝트를 효과적으로 사용할 수 있는 다양한 기능 제공
-빈을 검색하는 다양한 방법을 제공해준다.
ex.getBean() 함수
설정정보/설정 메타정보
애플리케이션 컨텍스트 또는 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보
IoC 컨테이너에 의해 관리되는 애플리케이션 오브젝트를 생성하고 구성할 때 사용
컨테이너/IoC 컨테이너
애플리케이션 컨텍스트보다 추상적인 표현
애플리케이션 컨텍스트 오브젝트 여러 개를 통틀어서 스프링 컨테이너라고 부를 수 있다.
스프링 프레임워크(=스프링)
스프링이 제공하는 모든 기능(애플리케이션 컨텍스트 등)을 통틀어 말할 때 주로 사용