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

+ Recent posts