: 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아닌 주입 받아 사용하는 방법을 뜻한다.
// before
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
// after
class OwnerController {
private OwnerRepository repository;
public OwnerController(OwnerRepository repository) {
this.repository = repository;
}
}
: 빈
인스턴스를 생성하고 필요로 하는 의존성을 찾아서 주입해주는 역할을 한다.
인스턴스의 생명주기를 대신 관리해주어 직접 다룰 일은 거의 없다.
: Spring IoC Container
가 관리하는 객체
이름, 클래스, 스코프, 프로퍼티 등을 정의할 수 있다.
@Component
public class SampleApplicationRunner implements ApplicationRunner {
@Autowired
private MemberRepository memberRepository;
@Override
public void run(ApplicationArguments args) {
memberRepository.save(new Member("Torreira", "Lucas"));
}
}
@Repository
public class MemberRepository {
void save(Member member);
}
@Component
애노테이션을 사용한 클래스를 자동으로 빈으로 등록해준다.<context:component-scan>
@ComponentScan
: 클래스간의 의존관계를 빈을 기반으로 컨테이너가 자동으로 연결해주는 것
Lombok 의 생성자를 이용하여 간단하게 적용 가능
@RequiredArgsConstructor
class OwnerController {
private final OwnerRepository repository;
}