: 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아닌 주입 받아 사용하는 방법을 뜻한다.
// 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;
}