Spring(4)
-
[Spring] AOP 프로그래밍
프록시 어떤 클래스에 팩토리얼을 계산하는 메소드가 있다고 하자. 만약 이 메소드의 실행 시간을 출력하려면 어떻게 해야할까? 간단한 방법은 메소드의 시작과 끝에서 시간을 구하고, 두 값의 차를 출력하면 될 것이다. 만약 시간을 구하는 코드를 변경해야 된다면 너무 귀찮지 않을까? 예를 들면, ms로 구하다가 ns로 구하고 싶다던가... 등등등 (사실 아직 필요성을 완벽히 느끼지는 못했다.) 이런 시간을 구하거나 기타 부가적인 기능을 대신하여 제공하는 객체를 프록시라고 부른다. 우리는 프록시를 이용해 위의 귀찮은 상황들을 해결할 수 있다. 프록시의 특징은 핵심 기능은 구현하지 않는다는 점이다. 대신 여러 객체에 공통으로 적용할 수 있는 기능을 구현한다. 이렇게 공통 기능 구현과 핵심 기능 구현을 분리하는 것이..
2022.09.05 -
[Spring] 빈 라이프사이클과 범위
컨테이너 초기화와 종료 스프링 컨테이너는 초기화와 종료라는 라이프사이클을 갖는다. 그리고 스프링 컨테이너는 빈 객체의 라이프사이클을 관리한다. 컨테이너가 초기화될 때 빈 객체의 생성, 의존 주입, 초기화가 이루어지고, 컨테이너가 종료될 때 빈 객체의 소멸이 일어난다. 스프링 컨테이너는 빈 객체를 초기화하고 소멸하기 위해 빈 객체의 지정한 메서드를 호출한다. 그리고 다음 두 인터페이스에 이 메서드를 정의하고 있다. public interface InitialzingBean { void afterPropertiesSet() throws Exception; } public interface DisposableBean { void destroy() throws Exception; } 빈 객체가 Initializ..
2022.09.04 -
[Spring] 컴포넌트 스캔
@Component 애노테이션 수동으로 설정 클래스에 빈 객체를 등록하지 않고, 자동으로 등록하려면 @Component 애노테이션을 붙여야 한다. @Component 애노테이션을 클래스에 붙이면 해당 클래스는 스캔 대상이 된다. @Component public class ChangePasswordService { ... } 이 때 @Component 애노테이션의 속성값을 지정하지 않았으므로 이 클래스 타입의 빈 이름은 클래스 이름의 첫 글자를 소문자로 바꾼 changePasswordService 가 된다. 따라서 이 빈 객체를 사용할 경우 getBean을 사용할 때 타입만으로 지정해도 되고, 이름을 명시하고 싶다면 위의 이름을 사용하면 된다. @Component("listPrinter") public c..
2022.09.04 -
[Spring] 자동 주입
@Autowired 자동의존주입받을 대상(필드, 세터 메소드)에 @Autowired 애노테이션을 붙이면 스프링이 타입이 일치하는 빈 객체를 찾아 주입해준다. package spring; import org.springframework.beans.factory.annotation.Autowired; public class ChangePasswordService { @Autowired //자동 주입 기능 private MemberDao memberDao; public void changePassword(String email, String oldPwd, String newPwd) { Member member=memberDao.selectByEmail(email); if(member==null) //암호 변경..
2022.08.31