본문 바로가기 메뉴 바로가기
스프링 빈 생명 주기
·
🌿 Spring/스프링 완전 정복
이전 글인 스프링 컨테이너와 스프링 빈과 스프링 컴포넌트 스캔에서 스프링 컨테이너가 스프링 빈 설정 정보를 참고하여 스프링 빈을 생성함을 확인했습니다. 이를 다시 한 번 살펴보겠습니다.스프링 컨테이너가 생성되고 스프링 빈 설정 정보를 기반으로 스프링 빈을 등록합니다. 그리고 스프링 컨테이너는 대개 애플리케이션 종료 전 소멸됩니다. 컨테이너가 소멸되기 직전에 스프링 빈이 소멸됩니다.스프링 빈은 스프링 컨테이너에 의해 생성됩니다. 이전 글인 스프링 컴포넌트 스캔과 스프링 의존관계 자동 주입에서 봤듯 스프링 빈이 필요로 하는 빈들이 주입되고 각 필드의 값이 초기화되고 사용한 후 소멸됩니다.빈 생명 주기인스턴스화 및 의존관계 주입스프링 빈 설정 정보 확인 및 BeanDefinition 객체 생성이전 글인 스프링..
스프링 의존관계 자동 주입
·
🌿 Spring/스프링 완전 정복
이전 글인 컴포넌트 스캔에서 살펴보았듯 자동으로 스프링 빈을 등록하려면 어디선가 객체 인스턴스를 주입해야 할 필요가 있게 됩니다. Spring에서는 개발자가 SOLID를 지키며 객체 인스턴스를 알아서 주입하도록 @Autowired 애너테이션을 준비했습니다.애너테이션 적용 위치@Autowired 애너테이션은 필드, 생성자, 메서드에 적용할 수 있습니다. 해당 애너테이션이 적용되면 스프링 컨테이너가 스프링 빈을 생성한 후에 @Autowird 애너테이션이 적용된 필드, 생성자, 메서드를 확인해 필요한 스프링 빈을 주입합니다.@Autowired 애너테이션의 동작 원리에 대해 살펴보려면 나중에 본 블로그에서 다루거나 다른 블로그의 좋은 글들을 봐주시기 바랍니다. (#1, ...)생성자 주입@Component// ..
스프링 컴포넌트 스캔
·
🌿 Spring/스프링 완전 정복
스프링 빈을 등록하는 방법에는 기존에 봐 왔던 AppConfig라는 외부 클래스의 각 메서드에 @Bean 애너테이션을 적용하거나 XML의 태그를 통해 스프링 빈을 수동으로 등록하는 방법, 그리고 설정 정보 없이 자동으로 스프링 빈을 등록하는 방법이 있습니다.컴포넌트 스캔스프링 컨테이너 생성 시 @ComponentScan 애너테이션이 적용된 클래스를 파라미터의 인자로 넘겨주면 @Component 애너테이션이 적용된 클래스를 찾아 해당 클래스의 인스턴스를 생성해 스프링 컨테이너가 관리하도록 해줍니다. 즉 스프링 빈으로 등록합니다.스프링이 자동으로 스프링 빈을 등록해 주는 방법을 채택하게 되면 @Component 애너테이션이 적용된 클래스에 애너테이션뿐만 아니라 약간의 변화를 주어야 합니다.기존에는 설정 정..
스프링과 싱글톤
·
🌿 Spring/스프링 완전 정복
대다수의 스프링 애플리케이션은 웹 애플리케이션으로 되어 있습니다. 웹 애플리케이션은 보통 다수의 사용자가 동시에 요청을 합니다. 사용자 A가 웹 사이트에 요청을 보낼 때 사용자 B도 웹 사이트에 요청을 보낼 수 있죠.그런데 이전에 설계한 AppConfig에 따르면 요청이 들어오면 새로운 객체 인스턴스, 즉 스프링 빈이 만들어져야 합니다. 그렇다면 사용자가 요청할 때마다 새롭게 객체 인스턴스를 생성하면 메모리 차지가 심하지 않을까요? 이를 해결하려면 객체 인스턴스가 하나만 생성되도록 하고 요청 시 같은 객체 인스턴스를 사용하도록 해야 합니다.싱글톤 패턴싱글톤 패턴은 객체 인스턴스가 하나만 생성되는 것을 보장하는 디자인 패턴입니다. 일단 객체 인스턴스가 외부에서 마구잡이로 생성되는 것을 막기 위해 생성자에 ..
스프링 컨테이너와 스프링 빈
·
🌿 Spring/스프링 완전 정복
IoCpublic class MemberServiceImpl implements MemberService { // 이 소스 코드에서는 MemberRepository라는 인터페이스(역할)와 // MemoryMemberRepository라는 객체(구현)에 동시 의존하고 있다. (의존 역전 원칙 위배) // MemoryMemberRepository를 DbMemoryMemberRepository로 바꾸려면 클라이언트인 // MemberServiceImpl의 소스 코드를 변경해야 한다. (개방-폐쇄 원칙 위배) private MemberRepository memberRepository = new MemoryMemberRepository(); @Override public vo..
patulus
'🌿 Spring' 카테고리의 글 목록