zoukankan      html  css  js  c++  java
  • springaopannotation

    1。假设你已经配好依赖注入那一块。此时的bean.xml为

       <?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"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context-3.0.xsd">
       <!-- 打开Spring的Annotation支持 -->
       <context:annotation-config/>
       <!-- 设定Spring 去哪些包中找Annotation -->
       <context:component-scan base-package="org.zttc.itat.spring"/>
               
    </beans>
     
    2.加上aop的schema    
        xmlns:aop="http://www.springframework.org/schema/aop"
        http://www.springframework.org/schema/aop    
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    3. 打开基于Annotation的AOP 
       <aop:aspectj-autoproxy/>
     
     
    最后的bean.xml为:
    <?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:aop="http://www.springframework.org/schema/aop"
         xmlns:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context-3.0.xsd
             http://www.springframework.org/schema/aop
             http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
       <!-- 打开Spring的Annotation支持 -->
       <context:annotation-config/>
       <!-- 设定Spring 去哪些包中找Annotation -->
       <context:component-scan base-package="org.zttc.itat.spring"/>
       <!-- 打开基于Annotation的AOP -->
       <aop:aspectj-autoproxy/>
       
    </beans>
     
    4.创建一个aop的关注点。 叫LogAspect.java.
        package org.zttc.itat.spring.proxy;
     
    import org.aspectj.lang.JoinPoint;
    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.springframework.stereotype.Component;
     
    @Component("logAspect")//让这个切面类被Spring所管理
    @Aspect//申明这个类是一个切面类
    public class LogAspect {
     
    /**execution说明我要在那些方法上使用该方法
     * execution(* org.zttc.itat.spring.dao.*.add*(..))
     * 第一个*表示任意返回值
     * 第二个*表示 org.zttc.itat.spring.dao包中的所有类
     * 第三个*表示以add开头的所有方法
     * (..)表示任意参数
     */
    @Before("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logStart(JoinPoint jp) {
    //得到执行的对象
    System.out.println(jp.getTarget());
    //得到执行的方法
    System.out.println(jp.getSignature().getName());
    Logger.info("加入日志");
    }
    /**
     * 函数调用完成之后执行
     * @param jp
     */
    @After("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logEnd(JoinPoint jp) {
    Logger.info("方法调用结束加入日志");
    }
     
    /**
     * 函数调用中执行
     * @param pjp
     * @throws Throwable
     */
    @Around("execution(* org.zttc.itat.spring.dao.*.add*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.delete*(..))||" +
    "execution(* org.zttc.itat.spring.dao.*.update*(..))")
    public void logAround(ProceedingJoinPoint pjp) throws Throwable {
    Logger.info("开始在Around中加入日志");
    pjp.proceed();//执行程序
    Logger.info("结束Around");
    }
     
    }
     
     
      4.1 导入aopalliance.jar   aspectjrt.jar  aspectjweaver.jar三个包,因为spring是使用Aspect来实现AOP
        
     
    总结:spring的AOP还是很简单的,前面配置好的依赖注入的例子根本不用动,我在这个给dao织入了方法,但是这只是这里单方面的知道,从被织的对象来说,它根本不知道你是不是给自己加入了方法。
  • 相关阅读:
    还是火柴排队(补一下归并排序的锅)
    火柴排队(NOIP2013)(附树状数组专题讲解(其实只是粗略。。。))
    转圈游戏(NOIP2013)
    接口和多态
    HttpClient-传入url得到json字符串( PostMethod method = new PostMethod(url)是个好方法)
    url和资源的再理解
    每天进步一点点- 资源与URI(吐血精华总结)
    每天进步一点点-一切皆对象/一次编写,到处运行/bean工厂
    java黑魔法-反射机制-02-通过Java反射调用其他类方法
    java黑魔法-反射机制-01
  • 原文地址:https://www.cnblogs.com/yujianjingjing/p/2953072.html
Copyright © 2011-2022 走看看