packageorg.cyxl.spring.controller;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="/test.action")
public class TestController {
@RequestMapping(params="m=save")
public void testduo(HttpServletRequest request,HttpServletResponse response,HttpSession httpSession)
{
System.out.println("abc");
httpSession.setAttribute("testsession","testsession");
System.out.println(httpSession.getAttribute("testsession"));
}
}
第二步创建
packageorg.cyxl.spring.aop;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpSession;
importorg.aspectj.lang.JoinPoint;
importorg.aspectj.lang.ProceedingJoinPoint;
importorg.aspectj.lang.annotation.AfterReturning;
importorg.aspectj.lang.annotation.AfterThrowing;
importorg.aspectj.lang.annotation.Around;
importorg.aspectj.lang.annotation.Aspect;
importorg.aspectj.lang.annotation.Before;
importorg.aspectj.lang.annotation.Pointcut;
importorg.springframework.web.context.request.RequestContextHolder;
importorg.springframework.web.context.request.ServletRequestAttributes;
@Aspect
public class LogAspect {
// 任何通知方法都可以将第一个参数定义为 org.aspectj.lang.JoinPoint类型
@Pointcut("execution(*org.cyxl.spring.controller.*.*(..))")
private void anyMethod(){}//定义一个切入点
@Before("anyMethod()")
public void doAccessCheck(JoinPoint call){
String clazz =call.getTarget().getClass().getName();
// 获取目标对象上正在执行的方法名
String methodName =call.getSignature().getName();
System.out.println("前置通知:" + clazz +"类的" + methodName +"方法开始了...");
System.out.println("前置通知");
HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session =request.getSession();
System.out.println(session.getAttribute("testsession"));
}
@AfterReturning("anyMethod()")
public void doAfter(){
System.out.println("后置通知");
}
@AfterThrowing("anyMethod()")
public void doAfterThrow(){
System.out.println("例外通知");
}
@Around("anyMethod()")
public Object doBasicProfiling(ProceedingJoinPointpjp)throws Throwable{
System.out.println("进入环绕通知");
Object object = pjp.proceed();//执行该方法
System.out.println("退出方法");
return object;
} }
第三部
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-4.1.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- ioc注解 -->
<context:component-scanbase-package="org.cyxl.spring.controller"></context:component-scan>
<aop:aspectj-autoproxy/>
<bean id="myInterceptor" class="org.cyxl.spring.aop.LogAspect"/>
</beans>
第四步
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-4.1.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 可以扫描controller、service、...
这里让扫描controller,指定controller的包
-->
<context:component-scanbase-package="org.cyxl.spring.controller"></context:component-scan>
<!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置-->
<!–通知spring使用cglib而不是jdk的来生成代理方法 AOP可以拦截到Controller->
<aop:aspectj-autoproxyproxy-target-class="true"/>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 视图解析器
解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置jsp路径的前缀 -->
<propertyname="prefix"value="/WEB-INF/jsp/"/>
<!-- 配置jsp路径的后缀 -->
<propertyname="suffix"value=".jsp"/>
</bean>
<!-- 文件上传 -->
<beanid="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<propertyname="maxUploadSize">
<value>5242880</value>
</property>
</bean>
<!-- 拦截器 -->
<!--
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<beanclass="com.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
-->
</beans>