spring mvc 基于aop日志管理

最近忙于面试换工作,不论是学习还是工作似乎都忽略了spring另外的一个强大之处:AOP;当被面试问道如何基于AOP做出一个单点登录的时候顿时有点傻眼。下来之后做了一番学习。本文以日志管理为例,说明AOP的强大之处。

首先,说明一下AOP的强大应用。

可以简单实现强大的功能:日志记录,性能统计,安全控制,事物处理,异常处理等。

AOP是Aspect Oriented Programming ,意识是面向切面变成,实际是GoF设计模式的延续。

Aspect:切面,在AOP中可以采用@Aspect注解来实现切面

Joinpoint:连接点,在Spring AOP中一个连接点代表一个方法的执行

Advice:通知,在切面(Aspect)的某个特定的连接点(Joinpoint)上执行的动作。通知有几种类型:

               around:方法执行前后通知;

               before:方法执行前通知;

               after:方法执行后通知;

Pointcut:定义一个或一组方法,当是在这些方法时可以产生通知。

@AspectJ风格的AOP配置

Spring AOP配置有两种风格:

     XML风格 = 采用声明形式实现Spring AOP 

    AspectJ风格 = 采用注解形式实现Spring AOP

注:本文采用XML风格

好了,开始我们的code。

首先搭建spring的配置在http://blog.csdn.net/upxiaofeng/article/details/38435531一文中阐述。

补充的是aop的xml配置:applicationContext.xml

<aop:aspectj-autoproxy />  
 <!-- 启用日志类 -->
    <bean id="mylog" class="controller.log.MyLog"></bean>
    <!-- AOP配置  proxy-target-class需要设置为true-->
 <aop:config proxy-target-class="true">
     <!-- expression 设置切入一个或者一组方法 -->
  <aop:pointcut id="log" expression="execution(* service.*.*(..))" />
  <!-- aspect 设置切面 -->
  <aop:aspect id="myLog" ref="mylog">
      <!-- before 方法执行之前通知,method:通知的方法 -->
   <aop:before pointcut-ref="log" method="before"/>
   <!-- after 方法执行之后通知,method:通知的方法 -->
   <aop:after pointcut-ref="log" method="after"/>
  </aop:aspect>
 </aop:config>

MyLog的代码:

package controller.log;

import org.aspectj.lang.JoinPoint;

public class MyLog {
	// 在类里面写方法,方法名诗可以任意的。此处我用标准的before和after来表示
	// 此处的JoinPoint类可以获取,action所有的相关配置信息和request等内置对象。
	public void before(JoinPoint joinpoint) {
		// 此方法返回的是一个数组,数组中包括request以及ActionCofig等类对象
		Object[] object = joinpoint.getArgs();
		for(Object o:object){
			System.out.println(o);
		}
		System.out.println(joinpoint.getClass().getMethods());
		System.out.println(joinpoint.getTarget());
		System.out.println("被拦截方法调用之前调用此方法,输出此语句");
	}

	public void after(JoinPoint joinpoint) {
		System.out.println("被拦截方法调用之后调用此方法,输出此语句");
	}

}

在执行service包里面的所有类的所有方法的时候会进入mylog中。

注:处理的时候可能会报错,是因为包重复原因是Spring中的cglib-nodep-2.1.3.jar与Hibernate中的cglib-2.2.jar相冲突!
我的解决方法是 删除cglib即可

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
地铁线路信息管理系统是一个基于Web的应用程序,主要用于管理地铁线路信息和提供查询服务。系统采用了SpringSpring MVC和MyBatis等技术,具有可扩展性、可维护性、可靠性和安全性等优点。 系统主要功能包括以下几个方面: 1. 地铁线路信息维护:管理员可以对地铁线路信息进行增、删、改、查等操作,包括线路名称、起始站、终点站、途经站点、票价等信息。 2. 站点信息维护:管理员可以对站点信息进行增、删、改、查等操作,包括站点名称、所属线路、经纬度等信息。 3. 车站信息维护:管理员可以对车站信息进行增、删、改、查等操作,包括车站名称、所属站点、到达时间、发车时间等信息。 4. 乘客查询服务:乘客可以通过系统查询地铁线路、站点和车站信息,以及票价和车次信息等。 5. 管理员权限管理:系统管理员可以对用户权限进行管理,包括添加、删除、修改角色和分配权限等。 6. 系统日志管理:系统可以记录用户的操作日志和异常日志,方便管理员进行系统的监控和管理。 在技术实现方面,系统采用了Spring作为IoC容器和AOP框架,Spring MVC作为Web框架,MyBatis作为持久化框架,同时还使用了其他技术如JSP、jQuery等。系统采用了Maven作为项目管理工具,可以方便地管理项目依赖和构建。在数据存储方面,系统采用了MySQL数据库进行数据存储和管理。 总之,基于Spring+Spring MVC+MyBatis技术的地铁线路信息管理系统具有实用性和可扩展性,可以满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值