< 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. Chrome在Ubuntu中缺少依赖项,无法安装

    在Ubuntu 13.04中,安装chrome会报下面这个错误(不知是不是因为我没有更新的原因:(  ): 也就是缺少名为libxss1的包. 解决办法,当然可以很简单的去找libxss1这个包下载, ...

  2. vulcanjs schemas&& collections

    一张参考图 说明 从上图我们可以方便的看出schmea 能做的事情 Generate a GraphQL equivalent of your schema to control your Graph ...

  3. BAT编程

    echo 表示显示此命令后的字符  echo off 表示在此语句后所有运行的命令都不显示命令行本身  @与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响 ...

  4. nyoj 一笔画问题

    一笔画问题 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画.   输入 第一行只有一个正整 ...

  5. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  6. win7 X64 使用VS2008 ->编译报错LINK : fatal error LNK1000: Internal error during Incr的解决

    编译报错LINK : fatal error LNK1000: Internal error during Incr的解决 Win7 旗舰版 Microsoft Visual Studio 2008 ...

  7. gcc gdb调试 & 命令行带参 (一) ******

    用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软 ...

  8. ThinkJava-复用类

    7 .2 继承语法 例子: package com.cy.reusing; import static com.java.util.Print.*; class Cleanser { private ...

  9. bootstrap导航条等样例持续更新》。。

    1.导航条 <!-- 导航条 --> <nav class="navbar navbar-static-top navbar-inverse"> <d ...

  10. poj 3255 Roadblocks 次短路(两次dijksta)

    Roadblocks Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...