[Spring] SpringAOP 2

김장환·2022년 9월 7일

Spring

목록 보기
16/17

예전에 했었던 SpringMVC2를 그대로 가져와서 이름만 바꾸고(SpringWebAOP)
거기에 AOP적용하여 진행해보고자 한다.


MyModel.java 생성 => 핵심클래스 만들기

  • 패키지 새로 생성 => lee.model

package lee.model;

//핵심기능을 처리해주는 메서드를 가진 클래스(=핵심클래스)
public class MyModel {

	public String processMsg() { //PointCut
		System.out.println("핵심기능을 실행시켜줌");
		return "스프링 웹 AOP 적용중";//${message}
	}
}

SecurityClass.java 생성 => (공통관심클래스)

  • 패키지=>lee
  • 핵심기능을 가진 메서드 실행전에 보여줄 메서드 선언
  • MyModel(핵심메서드)와 연결

package lee;

//핵심기능을 가진 메서드 실행전에 보여줄 메서드 선언
public class SecurityClass {
	public void security() {
		System.out.println("핵심내용전에 보안기능실행");
	}
}

MyAspectBean.java 생성 => (공통관심클래스)

  • 패키지=>lee
  • MyModel(핵심메서드와 연결)
  • 핵심메서드 전에 호출할 메서드 생성
    - SecurityClass
  • 핵심메서드 후에 호출할 메서드 생성
package lee;

//공통의 기능을 가진 메서드를 선언한 클래스(=Aspect 클래스(공통관심클래스))
public class MyAspectBean {

	public void beforeProcess() {//핵심메서드 전에 호출할메서드
		SecurityClass class1=new SecurityClass();
		class1.security();
	}
	//processMsg()
	public void afterProcess() {//핵심메서드 후에 호출할 메서드
		System.out.println("핵심 내용후에 실행됨!!(afterProcess)");
	}
}


HelloActionController.java 수정

  • 핵심클래스와 연결해주기
  • DI를 이용해서 의존객체주입할 객체지정(공통관심사항)
package lee;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

//외부패키지
import lee.model.MyModel;

//핵심클래스->중요한 역할 메서드(핵심메서드)=>handleRequest
public class HelloActionController implements Controller { //WorldActionController

	/*DI를 이용해서 의존객체주입할 객체지정(공통관심사항)*/
	private MyModel model; 
	
	public void setModel(MyModel model) {
		this.model=model;
	}
	
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, 
			                                              HttpServletResponse response) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("HelloActionController의 handleRequest()호출됨");
		//추가
		//->Security()호출
		String result=model.processMsg();
		//------------------------------------------------------------------------
		//->afterProcess()호출
		ModelAndView mav=new ModelAndView();//이동할페이지,화면에 출력할 데이터를 임시저장
		mav.setViewName("hello");//hello.jsp
		//mav.addObject("message","클릭하나!");//${message}
		mav.addObject("message",result);
		return mav; 
	}
}


환경설정->hello-servlet.xml에서 어떻게 AOP를 적용?
hello-servlet.xml aop설정 및 내용추가

  • namespaces에서 aop설정 해주기
  • 핵심클래스 빈즈등록부분 추가
  • 요청명령어 컨트롤러 작성 부분에 방금 위에 설정한 핵심클래스
    p:model-ref로 등록
  • Aspect클래스 빈즈 등록 추가
  • aop환경설정부분 추가
~생략~
<!-- 요청명령어에 따른 컨트롤러 클래스를 작성(=모델2 액션클래스) -->
<bean name="/hello.do"  class="lee.HelloActionController"
		p:model-ref="myModel" />

<!-- 1.핵심클래스 빈즈등록 -->
<bean name="myModel" class="lee.model.MyModel" />

<!-- 2.Aspect클래스 빈즈 등록 -->
<bean id="aspectBean" class="lee.MyAspectBean" />

<!-- 3.aop환경설정 -->
<aop:config>
	<aop:aspect id="aspect" ref="aspectBean">
		<aop:before pointcut="execution(* process*(..))" method="beforeProcess"/>
		<aop:after-returning pointcut="execution(* process*(..))" method="afterProcess" />
	</aop:aspect>
</aop:config>


index.html로 실행하면 끝


2022-09-07

0개의 댓글