spring mvc中配置aop
2016-12-05 22:02
141 查看
简单的controller层切面
1pom文件
2.配置文件中
2.1首先了解web.xml中的
2.2spring mvc相关配置
3.自定义注解,灵活的使用aop
@Target:表示该注解可以用于什么地方,可能的ElementType参数:
CONSTRUCTOR:构造器的声明
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明 PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
@Retention:表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。(常用)
@Document:将注解包含在Javadoc中
@Inherited:允许子类继承父类中的注解
注意:
注解可以设定初始值,使用default就可以实现。
注解只有一个元素的时候,该元素名称必须是value,并且在使用该注解的时候可以省略”alue=”。
注解的值必须是确定的,且不能使用null作为值。
注解可能的类型:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。
4.controller相关的方法
你只看到我在不停的忙碌,却没看到我奋进的热情;
你有你的规则,我有我的选择;
你否定我的现在,我决定我的未来;
你嘲笑我只懂编码,不配享受,我可怜你被代码操纵,而不自知;
你可以轻视我的年轻,我会证明这是谁的时代!
Coding是注定痛苦的旅行,路上少不了Bug和Change,但那又怎样?哪怕通宵达旦,也要编的漂亮!
我是程序员,我为自己代言。
1pom文件
<properties> <spring.version>4.1.8.RELEASE</spring.version> </properties> <dependencyManagement> <dependencies> <!-- spring依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- spring 上下文,读取配置文件 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- spring aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- 注解 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement>
2.配置文件中
2.1首先了解web.xml中的
<context-param><!-- spring相关配置 --> <param-name>contextConfigLocation</param-name> <param-value> classpath*:/root-context.xml </param-value> </context-param> <servlet><!-- spring mvc相关配置 --> <servlet-name>springServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/web-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
2.2spring mvc相关配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd ">
<mvc:annotation-driven /><!-- 注解 --> <context:component-scan base-package="com.dinfo.semanti.annotationInter" /> <!-- 相关类扫描 --> <aop:aspectj-autoproxy expose-proxy="true"/> <!-- aop相关配置 -->
3.自定义注解,灵活的使用aop
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ControllerPointcut { }3.1注解简单说明
@Target:表示该注解可以用于什么地方,可能的ElementType参数:
CONSTRUCTOR:构造器的声明
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明 PARAMETER:参数声明
TYPE:类、接口(包括注解类型)或enum声明
@Retention:表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
SOURCE:注解将被编译器丢弃
CLASS:注解在class文件中可用,但会被VM丢弃
RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。(常用)
@Document:将注解包含在Javadoc中
@Inherited:允许子类继承父类中的注解
注意:
注解可以设定初始值,使用default就可以实现。
注解只有一个元素的时候,该元素名称必须是value,并且在使用该注解的时候可以省略”alue=”。
注解的值必须是确定的,且不能使用null作为值。
注解可能的类型:所有基本类型、String、Class、enum、Annotation、以上类型的数组形式。
4.controller相关的方法
@RequestMapping("/queryApp") @ResponseBody @ControllerPointcut public Integer queryApp(HttpServletRequest request){ return 1; }5.切面类
//描述切面类 @Aspect @Component public class TestAop { public TestAop(){} /* * 定义一个切入点 */ // @Pointcut("execution (* findById*(..))") @Pointcut("@annotation(com.dinfo.semanti.annotationInter.ControllerPointcut)") public void excudeService(){} /* * 配置前置通知,使用在方法aspect()上注册的切入点 * 同时接受JoinPoint切入点对象,可以没有该参数 */ @Before("excudeService()") public void before(JoinPoint joinPoint){ if(log.isInfoEnabled()){ log.info("before " + joinPoint); } } //配置后置通知,使用在方法aspect()上注册的切入点 @After("excudeService()") public void after(JoinPoint joinPoint){ if(log.isInfoEnabled()){ log.info("after " + joinPoint); } } //配置环绕通知,使用在方法aspect()上注册的切入点 @Around("excudeService()") public JsonResponse twiceAsOld(ProceedingJoinPoint thisJoinPoint){ System.out.println("执行切面"); try { return (JsonResponse) thisJoinPoint.proceed(); } catch (Throwable e) { return JsonResponse.notOk("访问失败"); } } //配置后置返回通知,使用在方法aspect()上注册的切入点 @AfterReturning("excudeService()") public void afterReturn(JoinPoint joinPoint){ if(log.isInfoEnabled()){ log.info("afterReturn " + joinPoint); } } //配置抛出异常后通知,使用在方法aspect()上注册的切入点 @AfterThrowing(excudeService()) public void afterThrow(JoinPoint joinPoint, Exception ex){ if(log.isInfoEnabled()){ log.info("afterThrow " + joinPoint + "\t" + ex.getMessage()); } } }
你只看到我在不停的忙碌,却没看到我奋进的热情;
你有你的规则,我有我的选择;
你否定我的现在,我决定我的未来;
你嘲笑我只懂编码,不配享受,我可怜你被代码操纵,而不自知;
你可以轻视我的年轻,我会证明这是谁的时代!
Coding是注定痛苦的旅行,路上少不了Bug和Change,但那又怎样?哪怕通宵达旦,也要编的漂亮!
我是程序员,我为自己代言。
相关文章推荐
- Spring MVC和Spring配置AOP
- spring mvc aop配置事务的相关配置
- Spring MVC 配置 AOP
- aop切面配置不起作用引发的spring容器和spring mvc容器关系学习
- spring mvc aop配置事务的相关配置
- Spring mvc 对Controller配置AOP
- spring mvc中AOP事物的配置,AOP事物不生效解决办法
- 关于Spring MVC I18N 的配置问题
- 利用Spring的AOP来配置和管理你的二级缓存(EHCache)
- jms事务aop配置
- Spring 2.0 AOP 与事务配置突破
- Spring中AOP标签配置!
- Spring MVC 配置
- 基于配置的ORMapping框架浅析之4(面向方面的AOP切面思想引入)
- Spring MVC国际化配置(转载)
- Spring MVC框架的高级配置
- jboss aop配置
- 使用Spring AOP 自动代理配置声明式事务
- 在spring MVC中配置多个视图
- Spring 2.0 AOP 与事务配置