9-1 의존객체 자동 주입이란? 스프링 설정 파일에서 의존 객체를 주입할 때 <constructor-org> 또는 <property> 태그로 의존 대상 객체를 명시하지 않아도 스프링 컨테이너가 자동으로 필요한 의존 대상 객체를 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능이다. 구현 방법은 @Autowired와 @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다.
스프링 컨테이너
방법
@Autowired @Resource
9-2 @Autowired 주입하려는 객체의 타이비 일치하는 객체를 자동으로 주입한다.
@Autowired사용시 주의할 점 생성자에는 Autowired 주는 것은 상관없는데 프로퍼티 또는 메서드에 @Autowired를 줄 때에는 반드시 기본 생성자(디폴트 생성자)를 명시해주고 사용한다. 이유는 간단하다. 다음과 같이 WordDao를 필요로하는 메서드인데 해당 객체가 없으면 의존성 주입이 어렵다.
9-3 @Resource 주입하려고 하는 객체의 이름이 일치하는 객체를 자동으로 주입한다.
싱글톤(Singleton) 스프링 컨테이너에서 생성된 빈 (Bean) 객체의 경우 동일한 타입에 대해서는 기본적으로 한 개만 생성이 되며, getBean() 메소드로 호출될 때 동일한 객체가 반환된다.
Spring
Java
생성
new ClassName(); new ClassName(); new ClassName();
차이점
Spring Container는 처음 생성될 때 객체를 미리 생성한다. 따라서 getBean을 호출1, 호출2에서 각각 호출할 때 같이 "A" 객체를 바라본다.
기존 자바 코드에서 new를 할 때, 각각은 다른 메모리를 사용하여 객체를 생성한다.
프로토타입(ProtoType) 싱글톤 범위와 반대의 개념, 프로토타입의 경우 개발자는 별도로 설정을 해줘야 하는데 스프링 설정 파일에서 빈(Bean) 객체를 정의할 때 scope속성을 명시해 주면 된다. scope="prototype"을 해주면 Spring Container의 객체를 참조하는 것 아닌 새로운 메모리의 객체를 생성하게 끔 해준다. (위의 기존 java처럼, 흔치 않음)