CSE/Spring(14)
-
[Spring5입문] 프록시 생성 방식
- 스프링은 AOP를 위한 프록시 객체를 생성할 때, 실제 생성할 빈 객체가 인터페이스를 상속하면 인터페이스를 이용해서 프록시를 생성한다. => 따라서 아래 코드처럼 빈의 실제 타입이 RecCalculator라고 하더라도, 빈 객체는 Calculator 인터페이스를 상속받은 프록시 타입이 된다. //설정 클래스 @Bean public Calculator calculator(){ return new RecCalculator(); } //자바 코드 RecCalculator cal = ctx.getBean("calculator", RecCalculator.class); //calculator 빈의 실제 타입은 Calculator을 상속한 프록시 타입이므로 //RecCalculator로 타입 변환을 할 수 없기..
2021.08.11 -
[Spring5입문] 스프링 AOP
- 스프링 AOP를 이용하는 방법은 다음과 같다. Aspect로 사용할 클래스에 @Aspect 애노테이션을 붙인다. @Pointcut 애노테이션으로 공통 기능을 적용할 Pointcut을 정의한다. 공통 기능을 구현한 메서드에 @Around 애노테이션을 적용한다. - 개발자는 공통 기능을 제공하는 Aspect 구현 클래스를 만들고 자바 설정을 이용해서 Aspect를 어디에 적용할지 설정하면 된다. - 프록시는 스프링 프레임워크가 알아서 만들어준다. @Aspect public class ExeTimeAspect { //@Pointcut은 공통 기능을 적용할 대상을 설정한다. @Pointcut("execution(public * chap07..*(..))") private void publicTarget(){..
2021.08.11 -
[Spring5입문] AOP 프로그래밍 기초
1. 프록시와 AOP - RecCalculator 클래스 : Calculator 인터페이스를 상속하고 팩토리얼 메소드를 재귀 방법으로 오버라이딩 한 클래스 - ImpeCalculator 클래스 : Calculator 인터페이스를 상속하고 팩토리얼 메소드를 for 문을 통해 오버라이딩 한 클래스 => 이 두 클래스의 수정 없이, 코드 중복도 없이, 팩토리얼 메소드의 실행 시간을 구하려면? public class ExeTimeCalculator implements Calculator{ private Calculator delegate; public ExeTimeCalculator(Calculator delegate){ this.delegate = delegate; } @Override public long ..
2021.08.09 -
[Spring5입문] 빈 라이프사이클과 범위
1. 컨테이너 초기화와 종료 - 스프링 컨테이너는 초기화와 종료라는 라이프사이클을 갖는다. public class Example{ public static void main(String[] args){ //1. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); //2. 컨테이너에서 빈 객체를 구해서 사용 Greeter g = ctx.getBean("greater", Greeter.class); String.msg = g.greet("스프링"); System.out.println(msg); //3.컨테이너 종료 ctx.close(); } } (1) 컨테이너 초기화 ..
2021.08.09 -
[Spring5입문] 컴포넌트 스캔
- 컴포넌트 스캔 : 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능 => 설정 클래스에 빈으로 등록하지 않아도 빈 등록이 가능하므로 설정 코드가 크게 줄어드는 이점이 있다. 1. @Component 애노테이션으로 스캔 대상 지정 - @Component : 해당 클래스를 스캔 대상으로 표시한다. @Component public class 클래스이름{ ... } - @Component 애노테이션에 값을 주었는지에 따라 빈으로 등록할 때 사용할 이름이 결정된다. => 값을 주지 않았을 때 : 클래스 이름의 첫 글자를 소문자로 바꾼 이름이 빈 이름으로 사용된다 => 값을 주었을 때 : 그 값을 빈 이름으로 사용한다 @Component public class ExampleClass{ ... } //이 경..
2021.08.08 -
[Spring5입문] 의존 자동 주입
1. @Autowired 애노테이션을 이용한 의존 자동 주입 - 스프링의 자동 주입 기능을 사용하면 스프링이 알아서 의존 객체를 찾아서 주입한다. import org.springframework.beans.factory.annotation.Autowired; public class ChangePasswordService { @Autowired //의존을 주입할 대상에 @Autowired 애노테이션 추가 private MemberDao memberDao; public void setMemberDao(MemberDao memberDao) { this.memberDao = memberDao; } } //스프링 설정 파일 @Configuration public class AppCtx{ @Bean public M..
2021.08.04