spring aop的xml设置

1.aop可以在不更改代码的情况下,在代码执行前后增加方法。可以方便的提高效率。 例如在查看方法性能时、追加日志、增加权限等

测试类

package springdemo.demo4;

import org.springframework.stereotype.Component;

public class studentDao {
    public void save(){
        System.out.println("保存");
    }
    void update(){
        System.out.println("更新");
    }
    public String delete(){
        System.out.println("删除");
        return "删除了哈。。";
    }
    void search(){
        System.out.println("查询");
        int i =1/0;
    }
}

  aop 代理

package springdemo.demo4;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 切面类
 */
public class MyAspectXml {
    /**
     * 前置通知 可以获取切入点信息
     * @param joinPoint
     */
    public void chekPri(JoinPoint joinPoint){
        System.out.println("权限校验" + joinPoint);
    }

    /**
     * 后置通知 可以获取返回值内容
     * @param result
     */
    public void wlog(Object result){
        System.out.println("日志记录。。。" + result);
    }

    /**
     * 环绕通知  -性能监控
     * @param joinPoint
     * @return
     * @throws Throwable
     */
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("环绕前通知");
        Object object = joinPoint.proceed(); //执行目标程序
        System.out.println("环绕后通知");
        System.out.println("总共执行了3s");
        return object;
    }

    /**
     * 异常抛出
     */
    public void afterThrow(Throwable ex){
        System.out.println("异常抛出.." + ex.getMessage());
    }

    /**
     * 最终通知,相当于 finally
     */
    public void after(){
        System.out.println("最终通知...");
    }
}

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置扫描(哪些包下需要使用注解)-->
    <!--
    <context:component-scan base-package="springdemo.demo4"/>
    -->

    <bean id="studentDao" class="springdemo.demo4.studentDao"></bean>

    <!--将切面类交给spring管理-->
    <bean id="myAspect" class="springdemo.demo4.MyAspectXml"/>
    <!--通过AOP配置完成对目标产生的代理-->
    <aop:config>
        <!--表达式配置哪些类哪些方式需要增强-->

        <!--配置切点,需要运用切面的方法-->
       <aop:pointcut id="pointcut1" expression="execution(* springdemo.demo4.studentDao.save(..))"></aop:pointcut>
        <aop:pointcut id="pointcut2" expression="execution(* springdemo.demo4.studentDao.delete(..))"></aop:pointcut>
        <aop:pointcut id="pointcut3" expression="execution(* springdemo.demo4.studentDao.update(..))"></aop:pointcut>
        <aop:pointcut id="pointcut4" expression="execution(* springdemo.demo4.studentDao.search(..))"></aop:pointcut>
        <!--配置切面-->
        <aop:aspect ref="myAspect">
            <!--前置通知-->
            <aop:before method="chekPri" pointcut-ref="pointcut1"/>
            <!--后置通知-->
            <aop:after-returning method="wlog" pointcut-ref="pointcut2" returning="result"/>
            <!--环绕通知-->
            <aop:around method="around" pointcut-ref="pointcut3"/>
            <!--异常抛出通知-->
            <aop:after-throwing method="afterThrow" pointcut-ref="pointcut4" throwing="ex"/>
            <!--最终通知-->
            <aop:after method="after" pointcut-ref="pointcut4"/>
        </aop:aspect>
    </aop:config>
</beans>

原文地址:https://www.cnblogs.com/xiaoyii/p/9781318.html

时间: 2024-10-20 16:20:33

spring aop的xml设置的相关文章

spring maven pom.xml设置

spring pom.xml设置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="ht

Spring AOP 在XML中声明切面

转载地址:http://www.jianshu.com/p/43a0bc21805f 在XML中将一个Java类配置成一个切面: AOP元素 用途 <aop:advisor> 定义AOP通知器 <aop:after> 定义一个后置通知(不管目标方法是否执行成功) <aop:after-returning> 定义AOP返回通知 <aop:after-throwing> 定义AOP异常通知 <aop:around> 定义环绕通知 <aop:as

Spring AOP配置-xml

基于xml的spring AOP配置主要有几个步骤: 1.创建切面类 编写自定义增强代码(如事务处理,日志等) 2.创建service 提供连接点 3.配置切面 在配置之前,先了解一些专业术语 连接点:被拦截的方法 切入点:拦截规则(符合规则被拦截的一类方法) 通知/增强:对拦截的方法添加自定义功能 切面:就是切面类,在其中自定义通知 编写切面类 //切面类 public class AspectClazz { public void save() { System.out.println("保

Spring AOP基于xml配置实例

目录层级: AOP相关的几个类就是com.aop.xmltype这个报下的4个类. ICalculatorxml.java package com.aop.xmltype; /** * 加减乘除接口,用于AOP测试 * * @author Wei * */ public interface ICalculatorxml { /** * 加法 * * @param a * @param b * @return a+b */ public int doAdd(int a, int b); /** *

spring aop的xml配置详解

在Spring配置文件中,所以AOP相关定义必须放在<aop:config>标签下,该标签下可以有<aop:pointcut>.<aop:advisor>.<aop:aspect>标签,配置顺序不可变. <aop:pointcut>:用来定义切入点,该切入点可以重用: <aop:advisor>:用来定义只有一个通知和一个切入点的切面: <aop:aspect>:用来定义切面,该切面可以包含多个切入点和通知,而且标签内部的

Spring AOP基于XML配置文件的管理方式

1.配置Bean <!-- 定义一个普通Bean实例,该Bean实例将被作为Aspect Bean --> <bean id="fourAdviceBean" class="org.crazyit.app.aspect.FourAdviceTest"/> <!-- 再定义一个普通Bean实例,该Bean实例将被作为Aspect Bean --> <bean id="secondAdviceBean" cl

Spring初学之xml实现AOP前置通知、后置通知、返回通知、异常通知等

实现两个整数的加减乘除,在每个方法执行前后打印日志. ArithmeticCalculator.java: package spring.aop.impl.xml; public interface ArithmeticCalculator { int add(int i,int j); int sub(int i,int j); int mul(int i,int j); int div(int i,int j); } ArithmeticCalculatorImpl.java: packag

spring aop详解

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这种散布在各

spring AOP 前置增强,后置增强小Demo

服务员接口 Waiter.java package com.paic.zhangqi.spring.aop; public interface Waiter { void greetTo(String name); void serveTo(String name); } 服务员接口实现类 NaiveWaiter.java package com.paic.zhangqi.spring.aop; public class NaiveWaiter implements Waiter { @Over