基于IDEA的SSH项目之四:简单的切面应用

说明:接上文,用户登录成功了,现在的需求是需要记录UserService类的方法被执行了多少次。如果设置一个全局变量,在每个方法里面去更改变量的值,显然是不太合理的。本文主要是为了解决这个问题,因此采用切面的编程。



一、修改jar包。

由于之前引入的jar包:aopalliance.jar 已经不能满足需求了,需要更换为更高版本的。这里采用1.6.12版本。如下图所示:



二、引入log4j.properties配置,他的作用是能够在控制台显示更多的日志内容。(这一步跟本应用没有直接关系,只是为了更好的使用而已)

1、编写log4j.properties配置文件,放置在WEB-INF目录下,内容如下:

log4j.rootLogger=WARN, Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=(%r ms) [%t] %-5p: %c#%M %x: %m%n
 
log4j.logger.com.genuitec.eclipse.sqlexplorer=DEBUG
log4j.logger.org.apache=WARN
log4j.logger.net.sf.hibernate=WARN

2、在web.xml配置该资源,使其生效。如下:

    <!-- 以下3项参数与log4j的配置相关 -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>

    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.util.Log4jConfigListener
        </listener-class>
    </listener>
    <!-- end -->

三、编写切面文件

1、在service包下新建一个LogAspect文件,采用注记的形式。

package com.hzb.service;
import org.springframework.stereotype.Service;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.JoinPoint;

@Service
@Aspect
// 使用 @Aspect 标记
public class LogAspect {
    //用来记录次数
    private int count = 0;

    //定义切点,表示UserService中所有的方法
    @Pointcut("execution(* com.hzb.service.UserService.*(..))")
    public void init(){
    }

    //定义增强,并应用在切点 init() 处,Before表示在方法执行前先执行下面的方法
    @Before("init()")
    public void beforeAdvice(JoinPoint joinPaint){
        System.out.println("总共执行的次数:"+(++count));
        //还可以获取其他的信息
        //获取调用的目标类
        Object obj = joinPaint.getTarget();
        if(obj instanceof UserService){
            UserService   userService =  (UserService)obj;
            System.out.println("调用的目标类:"+userService.toString());
        }
        //获取调用的方法名
        System.out.println("调用的方法名:"+joinPaint.getSignature().getName());

        //获取传入的参数
        Object[] args=joinPaint.getArgs();
        for (int i = 0; i < args.length; i++) {
            System.out.println("传入的参数"+i+";"+args[i]); //输出传入的参数
        }
    }
}


2、在application.xml文件中配置,使上面的注记生效。只需加入以下一行内容。

    <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
    <aop:aspectj-autoproxy/>

四、启动服务后登陆测试,查看后台输出的内容。



此时的程序包地址见:http://download.csdn.net/detail/przzl/7319305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值