728x90
DI 어노테이션을 사용한 방법
- @Component
Spring Bean Configuration File을 통해 만든 xml의 context:component-scan 태그
- Namespaces에서 context를 체크한다.
<context:component-scan base-package="패키지이름"/>
xml의 context:component-scan 태그 base-package 속성에 패키지 이름을 적어 넣으면
해당 패키지 안에 있는 클래스를 로드하여 @Component 어노테이션에 있는 클래스를 Bean에 등록한다.
@Component 어노테이션의 경우 클래스에 필드가 없는 경우 사용한다.
- @Configuration
자바 클래스를 설정으로 이용할 수 있다. 클래스 상단에 어노테이션을 적용한다.
클래스 안의 메서드를 @Bean 어노테이션으로 Bean으로 등록하고 메서드명은 xml 설정의 id와 같다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ApplicationContext {
@Bean
public A methodA() {
A a = new A();
a.setName("이병건");
a.setValue("나이: 41");
return a;
}
@Bean
public B methodB() {
B b = new B();
b.setName("BBB");
b.setA(methodA()); // setter 주입
return b;
}
}
AOP (Aspect Oriented Programming 관점지향)
트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능을 해당 기능을 분리하여 관리할 수 있다.
Spring Bean Configuration File의 Namespaces에서 aop를 체크한다.
용어
- Aspect : 공통의 관심사들로 이루어진 모듈
- ex) 로그에 관련된 모듈을 모아둔 클래스/ 메서드 하나가 모듈 하나로 생각하면 된다.
- Target : 공통 모듈(Aspect)이 적용될 곳 (클래스 또는 메서드)
- Advice : 실제 적용될 공통 모듈 하나를 의미
- Joinpoint : advice가 적용되어야 하는 시점
- Pointcut : target이 상세화 된 것
<context:component-scan base-package="aopEx01"/>
<bean id="LoggerAOP01" class="aopEx01.Aspect01"/>
<aop:config>
<aop:aspect id="Logger01" ref="LoggerAOP01"> <!-- 참조할 Bean -->
<!-- expression으로 적용될 곳을 지정 (aopEx01 패키지의 A 클래스) -->
<aop:pointcut expression="within(aopEx01.A)" id="pointcutA"/>
<aop:pointcut expression="within(aopEx01.B)" id="PointcutB"/>
<aop:pointcut expression="within(aopEx01.C)" id="PointcutC"/>
<!-- 상단에 pointcutA로 지정한 aopEx01 패키지 A 클래스의
loggerAop01 메서드를 around로 지정 -->
<aop:around method="loggerAop01" pointcut-ref="pointcutA"/>
<aop:before method="loggerAop02" pointcut-ref="PointcutB"/>
<!-- 오류가 나더라도 무조건 호출되는 모듈 aop:after -->
<aop:after method="loggerAop03" pointcut-ref="PointcutC"/>
<!-- 핵심 로직이 정상 종료 되었을 때 호출되는 공통 모듈 -->
<aop:after-returning method="loggerAop03" pointcut-ref="PointcutC"/>
<!-- 핵심 로직이 오류가 발생하여 종료가 되었을 때 호출되는 공통모듈 -->
<aop:after-throwing method="loggerAop03" pointcut-ref="PointcutC"/>
</aop:aspect>
</aop:config>
ProceedingJoinPoint 클래스
- .getSignature() 호출되는 메서드에 대한 정보를 구한다.
- .getTarget() 대상 객체를 구한다.
- .getName 메서드의 이름을 구한다.
- .toShortString 메서드의 이름을 반환한다.
- .toLongString 메서드의 리턴타입, 파라미터 타입을 모두 포함해 반환한다.
- .Proceed 다음 advice 또는 target의 메서드를 진행한다.
728x90
'Java' 카테고리의 다른 글
JSTL foreach 한 리스트에서 객체 두 개씩 뽑아 사용하기 (0) | 2022.07.20 |
---|---|
네이버 로그인 API 구현 java/spring (1) | 2022.07.11 |
Spring의 특징 POJO/ DI/ IoC (0) | 2022.06.13 |
토이 프로젝트 주식 커뮤니티 만들기(4) - 클래스 다이어그램 (0) | 2022.05.19 |
토이 프로젝트 주식 커뮤니티 만들기(3) - DB (0) | 2022.05.18 |