객체(bean) 설정
-xml 방식 *
-자바 어노테이션 방식 * (이 방법을 많이 쓰지만 안쓸경우 xml방식을 알아야 함)
*(이거 코딩 흐름은 그냥 알아야됨)
-@Configuration
ㄴ> @Bean에 객체를 담는 방식 (스프링에서 관리해줌 싱글톤 보장)
AnnotationConfig 담은 클래스 호출해서 사용하면 됨
* @Autowired (킹갓자동최고봉) *
타입을 이용해서 자동으로 Bean타입 객체 주입
1. 필드위
2. 생성자 위
3. 매개변수 위
-@Component 방식 (이후에 배우면 정리)
@RequestMapping : method 지정 가능(get,post방식지정가능)
사실 이것보다
@GetMapping(url)
@PostMapping(url)
-ComponentScan : 해당 패키지 하위에 있는 클래스들에 어노테이션이 있는 경우 빈생성 및 등록
*"이름" : 클래스명 첫자를 소문자로
*** 관점 지향 프로그래밍 : AOP(Aspect Oriented Programming)
AOP는 메서드 안의 주기능과 보조 기능을 분리한 후 선택적으로 메서드에 적용해서 사용한다는 개념
ㄴ> 일단 개념적으로만 이해하고 이후에 api 개발하고 그러면 다시 같이 공부하기
proxy 패턴 (대신 실행해줌)
*** invocation (public Object invoke) 구조
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("[메서드 호출 전 : LogginAdvice");
System.out.println (invocation. getMethod() + "메서드 호출 전");
Object object = invocation.proceed();
System.out.println("[메서드 호출 후 : LoggingAdvice");
System.out.println(invocation. getMethod () + "메서드 호출 후");
return object;
}
@Aspect 어노테이션 방식
(( * 즉, AOP 주요 개념 *
Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.
Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )
Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음
* Spring AOP 특징 *
프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임
스프링 빈에만 AOP를 적용 가능
모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적 ))