어노테이션을 이용한 주입
어노테이션 : 런타임 , 컴파일시 정보를 제공하는 주석
1. Resource :이름과 타입이 일치해야함.변수명 기준
2. AutoWired : Bean을 주입하기 위해 사용하는 어노테이션. 타입이 기준이고 우선순위는 변수의 이름까지 동일한것.
Type에 따라 알아서 bean을 주입한다.
같은 타입의bean이 2개이상 존재하는 경우 Quailfier를 사용하여 지정이 가능하다.
3 . Inject : 타입이 기준. AutoWired와 동일함.
4. Component : 개발자가 생성한 클래스를 Spring의 Bean으로 등록할때 사용
클래스에 필드가없을때 외부에서 데이터를 넣어주지 않아도 되는 경우 어노테이션을 명시해주면됨
어노테이션은 직접 타이핑하지말고 ctrl+shift 눌러서 선택해야 import 된다.
상단에 Component를 먼저 선언한 후 Autowired선언
클래스에 Component를 명시해줘야 ioc가 찾아서 객체의 주입을 받을 수 있고, 명시하지 않을시 가상경로를 찾지못한다.
필드가 여러개일 경우 @Qualifier(value = "a") 이름을 특정해줌
처리를 해주는 실행문을 xml에 작성해줘야함
context 체크하면 ioc가 읽어들인다.
context관련태그를 사용할수있다.
패키지가 여러개일 경우 Component를 패키지마다 작성시 작성한 갯수만큼 context를 적어줘야한다.
주입받고자 하는 필드가 여러개인경우 각각 어노테이션 처리해준다.
IOC는 Component되어있는 기본생성자로 호출해서 객체만든다.
기본클래스없이 매개변수가 있는 생성자를 디자인하게되면 오류가남.
AOP(Aspect Oriented Programming)
공통되는 로직이나 기능을 하나로 묶어 모듈화함
AOP에서 다루는 용어
1. Aspect : 공통 관심사들로 이루어진 모듈들의 집합 (Advice를 다루는 클래스)
2. Advice : 실질적으로 적용될 공통 모듈 하나하나를 의미함.(메소드 하나하나)
3. Target : Advice가 적용될 곳(클래스 또는 메소드를 의미함)
4. joinpoint : Advice가 적용되는 시점(핵심로직을 기준으로 )
5. pointcut : Target에 대한 상세정보(클래스,메소드 단위 또는 메소드 이름을 세분화시킬수 있음)
aop관련태그 사용준비
첫번째에 출력되는 문자열이 메소드명을 제외하고는 중복되는 로직이다.
AOP는 중복되는 코드를 따로 분리하고 각각의 method에서 해내야하는 작업만 할 수 있게 하는 개념이다.
공통되는 로직을 LogAop클래스에 메소드로 정의한다.
getsignature(),toShortString() : 메소드는 호출되는 클래스의 이름과 메소드의 이름을 간략하게 출력해준다.
JoinPoint :시점정보를 가지고있는 객체, 메소드의 이름을 추출.
applicationContext.xml에서 A와 LogAop 클래스의 bean을 등록해주고
aop:config로 aspect를 정의해준다.
aop:aspect에 공통되는 로직이 포함되고있는 LogAop를 참조해준다.
bean에 정의한 id와 같아야한다.
aop:pointcut : 어드바이스를 적용할 타겟의 메소드를 선별하는 정규표현식
within : 특정메소드를 포인트컷 할때 사용하는 표현식
after태그는 예외가 발생해도 공통모듈이 호출된다.