FrameWork/Spring

[SPRING] AOP를 이용하여 어노테이션(annotation) 만들기(활용 / 사용법)

밍글링글링 2017. 12. 4.
728x90

Mingty.java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Mingty {
    
    public String name() default "";
    public String value() default "";
}

위와 같이 기본 어노테이션 인터페이스를 생성한다.

 

그 후, Controller에 

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import mingty.util.Mingty;

@Controller
@RequestMapping("/ex")
public class Excontroller {
    
    @Jungle(name="abc", value="/")
    @RequestMapping
    public String abc(HttpSession session){
        session.setAttribute("hi", "good");
        System.out.println("이거다"+session.getAttribute("hey"));
        
        return "error/error";
    }
}

위와 같이 메서드 위에 Jungle이라는 어노테이션이 추가된 것을 확인할 수 있다.

 

아래와 같이 파라미터값을 받거나 세션을 생성 및 요청받을 수 있는 것을 확인할 수 있다.

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class MingtyAOP {
    
    @Autowired HttpServletRequest request;
    @Autowired HttpServletResponse response;
    @Autowired HttpSession session; 
    
    @Around("@annotation(mingty.util.Mingty) && @ annotation(mingty)")
    public Object customAnnoTest(ProceedingJoinPoint joinPoint, Mingty mingty) throws Throwable {
         
        String hi = request.getParameter("hi");
        if(mingty.name().equals("abc")){
            System.out.println("zzzzz");
            System.out.println(">>>>>zz"+session.getAttribute("hi"));
            session.setAttribute("hey", "aaa");
        }
        
        
        System.out.println(">>>>>>"+hi);
        System.out.println("name : " + mingty.name());
        System.out.println("code : " + mingty.value()  );
        Object returnPoint = joinPoint.proceed();
        return returnPoint;
    }
}
 

 

위와 같이 사용할 수 있다.

 

728x90

댓글