1. 程式人生 > >Spring 使用javaconfig配置aop

Spring 使用javaconfig配置aop

port proc sage sign base param fas pan urn

1.在xml中需要配置自動代理



/**
 * 
 */
package com.junge.demo.spring.dao;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

import com.junge.demo.spring.advice.MyLogImpl;

/** * @author Administrator * */ @Configuration @ComponentScan(basePackageClasses= {MyLogImpl.class,UserDao.class}) @EnableAspectJAutoProxy public class DaoConfig { }

2.java類需要添加@Aspect註解。

package com.junge.demo.spring.advice;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; 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;
import com.alibaba.fastjson.JSONObject; @Component("myLog") @Aspect public class MyLogImpl { @Pointcut("execution(* com.junge.demo.spring.dao..*(..))") public void pointcut() { } @Before("pointcut()") public void beforeFunc() { System.out.println("beforeFunc ..."); } @After("pointcut()") public void afterFunc() { System.out.println("afterFunc ..."); } @AfterReturning("pointcut()") public void returnFunc() { System.out.println("returnFunc ..."); } @AfterThrowing(pointcut="pointcut()", throwing="e") public void throwExpFunc(Exception e) { System.out.println("throwExpFunc ..."); System.out.println(e.getMessage()); } @Around("pointcut()") public void aroundFunc(ProceedingJoinPoint point) { System.out.println("arount before invoke ..."); if (null != point.getArgs() && point.getArgs().length > 0) { for (Object arg : point.getArgs()) { System.out.println("around args:" + JSONObject.toJSON(arg)); } } System.out.println(point.getTarget()); System.out.println(point.getThis()); System.out.println(point.getKind()); System.err.println(point.getClass()); System.out.println(point.getSignature()); try { Object result = point.proceed(); System.out.println("around result:" + JSONObject.toJSONString(result)); System.out.println("around after return ..."); } catch (Throwable e) { System.out.println("around after throws ..."); } System.out.println("around after ..."); } }

3.運行結果

/**
 * 
 */
package com.junge.demo.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.junge.demo.spring.dao.DaoConfig;
import com.junge.demo.spring.dao.UserDao;
import com.junge.demo.spring.dao.impl.cc.dd.ff.ee.SubClassTest;
import com.junge.demo.spring.service.IPerface;
import com.junge.demo.spring.service.ServiceConfig;

/**
 * @author Administrator
 *
 */
public class ServiceConfigApp {

    private static ApplicationContext applicationContext;

    /**
     * @param args
     */
    public static void main(String[] args) {
        applicationContext = new AnnotationConfigApplicationContext(ServiceConfig.class, DaoConfig.class);
//        System.out.println(applicationContext.getBeansOfType(IPerface.class));
//        applicationContext.getBean(UserDao.class);
        
        applicationContext.getBean(SubClassTest.class).addTest(3, 1);
    }

}

技術分享圖片

Spring 使用javaconfig配置aop