< 1 > 配置文件

<?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:p="http://www.springframework.org/schema/p"
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/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"
>
<!-- 最简单的注入 p 命名空间 -->
<bean id="person" class="spring.beans.Person"
p:personName="张三"
p:personSex="男"
p:personAge="1"
></bean> <!-- 自动生成所有被 @Aspect 标注修饰的类 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy> <!-- 设置 Spring 容器扫描哪些包下面的 JavaBean, * 代表所有包 -->
<context:component-scan base-package="spring.beans"></context:component-scan> </beans>

< 二 > 切面类的定义 ( 前置通知: @Before, 后置通知: @After, 正常返回通知: @AfterReturning, 异常返回通知: @AfterThrowing)

package spring.beans;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component; @Aspect // 声明切面类
@Component // 声明是一个 JavaBean
public class MyAop { // ( 方法执行前的方法 ) execution 是切点表达式
@Before("execution (public String spring.beans.User.toString())")
public void before() {
System.out.println("前置方法");
} // ( 方法执行后的方法 ) 注: 不管正常执行或者抛出异常
@After("execution (public String spring.beans.User.toString())")
public void after() {
System.out.println("后置处理");
} // ( 方法正确执行后的方法 ) 参数(切点表达式, 返回值变量)
@AfterReturning(pointcut="execution (public String spring.beans.User.toString())", returning="result")
public void returning(JoinPoint join, String result){
System.out.println("方法名: " + join.getSignature().getName());
System.out.println("结果为: " + result);
}

// ( 方法抛出异常时执行的方法 ) 参数(切点表达式, 抛出的异常变量)
@AfterThrowing(pointcut="execution (public String spring.beans.User.toString())", throwing="ex")
public void throwing(JoinPoint join, Exception ex){
System.out.println(ex.getMessage());
}
}

 < 3 > 切面类的定义 ( 环绕通知: @Around ) 注: 功能强大但是不常用

package spring.beans;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component; @Aspect // 声明切面类
@Component // 声明是一个 JavaBean
@Order(0) // 声明切面顺序,越小优先级越高
public class MyAop_02 { // 环绕通知
@Around("execution (public String spring.beans.Person.toString())")
public void around(ProceedingJoinPoint join){
try {
System.out.println("方法调用之前");
String result = (String) join.proceed();
System.out.println("正常返回结果" + result);
} catch (Throwable e) {
System.out.println("出现了异常喽");
e.printStackTrace();
} finally {
System.out.println("方法调用之后");
}
}
}

 

JAVA Spring 面向切面编程 基本案例(AOP)的更多相关文章

  1. Spring 面向切面编程(AOP)

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  2. 快速高效掌握企业级项目中的Spring面向切面编程应用,外带讲面试技巧

    Spring面向切面编程(AOP)是企业级应用的基石,可以这样说,如果大家要升级到高级程序员,这部分的知识必不可少. 这里我们将结合一些具体的案例来讲述这部分的知识,并且还将给出AOP部分的一些常见面 ...

  3. Spring面向切面编程(AOP)

    1 spring容器中bean特性 Spring容器的javabean对象默认是单例的. 通过在xml文件中,配置可以使用某些对象为多列. Spring容器中的javabean对象默认是立即加载(立即 ...

  4. Spring——面向切面编程(AOP)详解

    声明:本博客仅仅是一个初学者的学习记录.心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流.一起学习.一起进步的朋友可以加我微信Liu__66666666 这是简单学习一遍之 ...

  5. Spring 08: AOP面向切面编程 + 手写AOP框架

    核心解读 AOP:Aspect Oriented Programming,面向切面编程 核心1:将公共的,通用的,重复的代码单独开发,在需要时反织回去 核心2:面向接口编程,即设置接口类型的变量,传入 ...

  6. Java笔记——面向切面编程(AOP模式)

    原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面 ...

  7. 详解Spring面向切面编程(AOP)三种实现

    一.什么是AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善. ...

  8. Spring面向切面编程(AOP,Aspect Oriented Programming)

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  9. 再学习之Spring(面向切面编程)

    一.概念 1.理论 把横切关注点和业务逻辑相分离是面向切面编程所要解决的问题.如果要重用通用功能的话,最常见的面向对象技术是继承(inheritance)或 组成(delegation).但是,如果在 ...

随机推荐

  1. 从dfs向动态规划过渡

    据说每一个dfs,都能用动态规划思想做出来. 首先要明白dfs与动态规划的一些小要点   1)dfs重在通过使用递归来使用不同的选择,通过使用形参的改变实现不同情景的改变(形参既包括了代价,又包含了结 ...

  2. PipelineDB 1.0.0 docker 运行

    PipelineDB 1.0 是基于标准的pg 扩展来做的,安装也更方便了,目前还没有对应的docker 镜像 所以参考timescaledb 做了一个,方便测试以及使用 参考地址 https://g ...

  3. Java 发展历史

    Java自1995诞生,至今已经20多年的历史. Java的名字的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名.Java语言中的许多库类名称,多与咖啡有关,如JavaBeans(咖啡豆 ...

  4. CF 914F Substrings in a String——bitset处理匹配

    题目:http://codeforces.com/contest/914/problem/F 可以对原字符串的每种字母开一个 bitset .第 i 位的 1 表示这种字母在第 i 位出现了. 考虑能 ...

  5. RPC终结点映射

    “没有更多的终结点可用”错误消息表示 RPC 终结点映射程序无法对基于 RPC 运行的服务使用大于 1024 的端口.注意:RPC 终结点映射程序在端口 135 上运行. http://support ...

  6. java jni 调用c++ opencv代码成功范例

    java上建立接口定义 package com.dtk; public class Rec { public native String RecImage(String src); public st ...

  7. HttpUrlConnection使用详解--转

    http://blog.csdn.net/fightingXia/article/details/71775516 一,HttpURLconnection的介绍 在Android开发中网络请求是最常用 ...

  8. Java 经典练习题_Day06

    面向对象与面向过程的比较 类与对象的关系 成员变量和局部变量 构造方法 this 构造代码块 局部代码块 匿名对象 一. 选择题 1.下列各项中关于面向对象及面向过程的说法错误的是:(BDE) A.  ...

  9. gearman在虚拟机上运行没有自动开启的处理

    几天来被gearman无响应的问题困扰,后来请教了大神解决.原因是gearman在虚拟机上运行不稳定,无法自动开启,需手动开始,输入图片的两行命令即开始.

  10. VS Code 基本介绍 和 快捷键

    简介 VSCode是微软推出的一款轻量编辑器,采取了和VS相同的UI界面,搭配合适的插件可以大幅提升前端开发的效率. 布局:左侧是用于展示所要编辑的所有文件和文件夹的文件管理器,依次是:资源管理器,搜 ...