关于spring aop 自定义注解实现记录日志

18岁的年华 发布于 2017/02/27 17:53
阅读 449
收藏 2

       <context:component-scan base-package="com.zyc" />ss
    
    <!-- 打开aspectj的代理 -->
 
    <aop:aspectj-autoproxy proxy-target-class="true"  />

<aop:config proxy-target-class="true">
        <aop:aspect id="logAspect" ref="logAspect">
            <aop:pointcut expression="@annotation(com.zyc.aop.Log)" id="pointcutlog"/>
            <aop:before method="before" pointcut-ref="pointcutlog"/>
        </aop:aspect>
        
    </aop:config>

 

以下是aop切面

package com.zyc.aop;

import java.lang.reflect.Method;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

@Component("logAspect")
public class LogAspect{
    public void before(JoinPoint joinPoint){
        System.out.println("进入before方法======================");
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        Log log =  method.getAnnotation(Log.class);
        if(log!=null){
            System.out.println(log.value());
            
        }
        
    }
}

自定义注解

package com.zyc.aop;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 记录业务日志
 * @author zyc
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
    
     String value();
}

使用方法

package com.zyc.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.zyc.aop.Log;
import com.zyc.dao.Data1Dao;
import com.zyc.service.Data1;

@Service("data1")
public class Data1Impl implements Data1  {

    public static Data1Dao data1Dao;
    
    @Resource
    public  void setData1Dao(Data1Dao data1Dao) {
        Data1Impl.data1Dao = data1Dao;
    }
    @Log(" this is a log ")//此处做日志
    public void getUserInfo()
    {
        System.out.println("name:zyc");
        data1Dao.getName();
    }
}

运行项目报错

Caused by: java.lang.IllegalArgumentException: error the @annotation pointcut expression is only supported at Java 5 compliance level or above

用的jdk :1.7, aop jar:1.6.2 ,spring:3.0, 求大神帮帮忙,希望能解释一下

加载中
返回顶部
顶部