Spring3 aop aspectj 打印日志

Spring3 aop  aspectj  打印日志
<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"
       default-lazy-init="true">

	<!-- Activates scanning of @Service -->
    <context:component-scan base-package="com.xiu.search.core">
    	<context:include-filter type="regex" expression=".util"/>
    </context:component-scan>
   <!--   
    <bean id="logInteceptor" class="com.xiu.search.web.util.LogInteceptor"></bean>
    <aop:config>
         <aop:aspect id="b" ref="logInteceptor">
         <aop:pointcut id="log" expression="execution(* com.xiu.search.core.*.*(..))"/>
         <aop:pointcut id="log" expression="execution(* com.xiu.search.core.*.*.*(..))"/>
         <aop:before pointcut-ref="log" method="before"/>
         <aop:after pointcut-ref="log" method="after"/>
         </aop:aspect>
    </aop:config>
  --> 
    <aop:aspectj-autoproxy/>
</beans>

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect  
@Component 
public class LogInteceptor {
	private Logger logger = Logger.getLogger(getClass());
	
        /**
         * 拦截类的入口
         */
	@Pointcut("execution(* com.xiu.search.core.bof.impl.BrandBoImpl(..))")
	public void pointCut() {
		logger.info("ponit....");
	}
	
	@Before("pointCut()")
	public void before() {
		logger.info("被拦截方法调用之前调用此方法,输出此语句");
	}

	@After("pointCut()")
	public void after() {
		logger.info("被拦截方法调用之后调用此方法,输出此语句");
	}
	
	@Around("pointCut()")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("开始环绕通知");//前置通知后执行
        pjp.getArgs();//拦截类的入参数
        pjp.getTarget();//拦截类
        Object obj=pjp.proceed();//此处返回的是拦截的方法的返回值,如果不执行此方法,则不会执行被拦截的方法,利用环绕通知可以很好的做权限管理
        System.out.println(obj+"结束环绕通知");//后置通知后、最后通知前执行
        return obj;
    }
	
}

你可能感兴趣的:(Spring3)