예전에 했었던 SpringMVC2를 그대로 가져와서 이름만 바꾸고(SpringWebAOP)
거기에 AOP적용하여 진행해보고자 한다.
MyModel.java 생성 => 핵심클래스 만들기
package lee.model;
//핵심기능을 처리해주는 메서드를 가진 클래스(=핵심클래스)
public class MyModel {
public String processMsg() { //PointCut
System.out.println("핵심기능을 실행시켜줌");
return "스프링 웹 AOP 적용중";//${message}
}
}
SecurityClass.java 생성 => (공통관심클래스)
package lee;
//핵심기능을 가진 메서드 실행전에 보여줄 메서드 선언
public class SecurityClass {
public void security() {
System.out.println("핵심내용전에 보안기능실행");
}
}
MyAspectBean.java 생성 => (공통관심클래스)
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 수정
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설정 및 내용추가
~생략~
<!-- 요청명령어에 따른 컨트롤러 클래스를 작성(=모델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