< 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. ballerina 学习 三十 扩展开发(一)

    ballerina 主要是分为两大类 基于ballerina 语言开发的,一般是客户端的connector 使用java语言开发的(类似的基于jvm的都可以),一般是注解以及进行构件生成 baller ...

  2. 横竖两个数字塔的效果BAT批处理怎么写?

    横竖两个数字塔的效果BAT批处理怎么写?@echo offfor /l %%a in (0,1,1) do (        for /l %%i in (0,1,9) do (        for ...

  3. Mysql监控调优

    提升性能 1.允许情况下,调大连接数 2.开启查询缓存(看命中率,用在变化不大的表内) 3.锁(查看是否存在死锁) 4.慢查询(将执行时间过长的语句写入日志内) 5.explain(分析表结构,typ ...

  4. 【转】每天一个linux命令(42):kill命令

    原文网址:http://www.cnblogs.com/peida/archive/2012/12/20/2825837.html Linux中的kill命令用来终止指定的进程(terminate a ...

  5. js ==与===区别(非严格相等与严格相等)

    基本数据类型:number.string.boolean.undefined.null 高级数据类型:object 表格形式比较: 比较的类型 == === 基础类型 不同基础类型间比较," ...

  6. golang panic的捕获

    panic发生时, 会导致进程挂掉.为了处理panic, 可以使用recover捕获,然后处理. 下面以下标引用越界问题为例进行说明. 正常情况下,代码中如果出现下标越界,会直接触发panic, 导致 ...

  7. Hadoop专业解决方案-第1章 大数据和Hadoop生态圈

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第1章 大数据和Hadoop生态圈小组已经翻译完成,在此 ...

  8. 【XMLHttpRequest】获取XMLHttpRequest

    // 获取http请求 function getXMLHttpRequest() { req = false; //本地XMLHttpRequest对象 if (window.XMLHttpReque ...

  9. mac电脑链接安卓手机的方法

    https://blog.csdn.net/liubin9043/article/details/78928253/ 我用了个爱莫 不错 http://web.airmore.com

  10. 9-16Jenkins-3可用的环境变量、参数化构建和依赖

    1.环境变量 可以查看可用的环境量 执行构建 2.参数化构建 3.依赖 多个工程可以在按既定顺序执行 test1225-2的构建触发器设置