热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

springAOP的After增强实现方法实例分析

这篇文章主要介绍了springAOP的After增强实现方法,结合实例形式分析了spring面向切面AOP的After增强实现步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了spring AOP的After增强实现方法。分享给大家供大家参考,具体如下:

一 配置

<&#63;xml version="1.0" encoding="GBK"&#63;>

   
   
      
   
   
   


二 切面类

package org.crazyit.app.aspect;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.*;
// 定义一个切面
@Aspect
public class ReleaseAspect
{
  // 匹配org.crazyit.app.service包下所有类的、
  // 所有方法的执行作为切入点
  @After("execution(* org.crazyit.app.service.*.*(..))")
  public void release()
  {
    System.out.println("模拟方法结束后的释放资源...");
  }
}

三 接口

Hello

package org.crazyit.app.service;
public interface Hello {
   // 定义一个简单方法,模拟应用中的业务逻辑方法
   void foo();
   // 定义一个addUser()方法,模拟应用中的添加用户的方法
   int addUser(String name, String pass);
}

World

package org.crazyit.app.service;
public interface World {
   // 定义一个简单方法,模拟应用中的业务逻辑方法
   public void bar();
}

四 实现类

HelloImpl

package org.crazyit.app.service.impl;
import org.springframework.stereotype.Component;
import org.crazyit.app.service.*;
@Component("hello")
public class HelloImpl implements Hello
{
  // 定义一个简单方法,模拟应用中的业务逻辑方法
  public void foo()
  {
    System.out.println("执行Hello组件的foo()方法");
  }
  // 定义一个addUser()方法,模拟应用中的添加用户的方法
  public int addUser(String name , String pass)
  {
    System.out.println("执行Hello组件的addUser添加用户:" + name);
    if(name.length() <3 || name.length() > 10)
    {
      throw new IllegalArgumentException("name参数的长度必须大于3,小于10!");
    }
    return 20;
  }
}

WorldImpl

package org.crazyit.app.service.impl;
import org.springframework.stereotype.Component;
import org.crazyit.app.service.*;
@Component("world")
public class WorldImpl implements World {
  // 定义一个简单方法,模拟应用中的业务逻辑方法
  public void bar() {
    System.out.println("执行World组件的bar()方法");
  }
}

五 测试类

package lee;
import org.springframework.context.*;
import org.springframework.context.support.*;
import org.crazyit.app.service.*;
public class BeanTest {
  public static void main(String[] args) {
    // 创建Spring容器
    ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
    Hello hello = ctx.getBean("hello", Hello.class);
    hello.foo();
    hello.addUser("悟空", "7788");
    World world = ctx.getBean("world", World.class);
    world.bar();
  }
}

六 测试结果

执行Hello组件的foo()方法
模拟方法结束后的释放资源...
执行Hello组件的addUser添加用户:悟空
模拟方法结束后的释放资源...
Exception in thread "main" java.lang.IllegalArgumentException:  name参数的长度必须大于3,小于10!
     at  org.crazyit.app.service.impl.HelloImpl.addUser(HelloImpl.java:30)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native  Method)
     at  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:498)
     at  org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
     at  org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
     at  org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
     at  org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:43)
     at  org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
     at  org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
     at  org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
     at  org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
     at com.sun.proxy.$Proxy7.addUser(Unknown Source)
     at lee.BeanTest.main(BeanTest.java:26)

更多关于java相关内容感兴趣的读者可查看本站专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


推荐阅读
  • 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
    智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台 ... [详细]
  • apk简单介绍APK的组成apk安装流程app的启动过程apk打包流程AIDLAIDL介绍为什么要设计这门语言它有哪些语法?默认支持的数据类型包括什么是apk打包流程 ... [详细]
  • 把Bean注入到IOC容器里面的方式有7种方式:使用xml的方式来声明Bean的定义,Spring容器在启动的时候会加载并解析这个xml, ... [详细]
  • SpringMVC启动流程——DispatcherServlet由于DispatcherServlet本身就是一个Servlet,它的本质上是一个Servlet,只是子类不断的对H ... [详细]
  • 记录工作和学习中遇到和使用过的Python库。Target四个Level整理Collect学习Learn练习Practice掌握Master1.Python原生和功能增强1.1py ... [详细]
  • nginx+tomcat session 共享
    *tomcat1192.168.10.153*tomcat2192.168.10.154Tomcat工作模式必须为Nio模式。##添加如下内容,注意更换address ... [详细]
  • 重学数据结构之链表篇
    本文是重学数据结构系列文章的第二篇,本文和大家一起探讨链表的相关知识。重学数据结构之数组篇文章目录链表是怎么样的数据结构链表的特点常见的链表结构单链表双向链表循环链表链表or数组链 ... [详细]
  • PHPcURL获取微信公众号access_token的实例php实例:这篇文章主要介绍了PHPcURL获取微信公众号access_token的实例,需要的朋友可以参考下1.开发微信 ... [详细]
  • ROC曲线原理及Python实现
    受试者工作特征曲线(receiveroperatingcharacteristiccurve,简称ROC曲线),是比较两个分类模型好坏的可视化工具ROC曲线的作用:1.较容易地查出 ... [详细]
  • 最近想用js做一个简单的计算器,不过网上的例子好像大部分都是直接从左到右挨个计算,就好像1+2*5,就会先计算1+2,再计算3*5,并没有实现运算符的优先级,这里找到了一种方法实现,来总结一下。不过这 ... [详细]
  • DFS基本概念步骤优缺点典型例题递推基本概念直接或者间接调用自身的算法称为递归算法一般数据n ... [详细]
  • 编程语言是从哪蹦出来的——大型伦理寻根现场
    Hello,我是Alex007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫Alex的人太多了,再加上每天007的生活,Alex007就诞生了。聊一聊编程到底是啥,怎 ... [详细]
  • 进修JavaScript的原型笔记
    JavaScript的原型(prototype、__proto__、constructor)组织函数:functionFoo(){};实例对象:letf1newFoo;leto1n ... [详细]
  • springioc_SpringIOC和DI
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringIOC和DI相关的知识,希望对你有一定的参考价值。1.Spring的概 ... [详细]
  • 在JAVA中专门设计了一组类,他们实现了各种各样的数据存储,这种专门用来存储其他对象的类,被称为容器类,这组类和接口的设计结构也被称为集合框架(CollectionFramework)。JAVA集 ... [详细]
author-avatar
一只小蚂蚁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有