Spring AOP

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

spring aop(Aspect-Oriented-Programming 面向方面编程 ) 的几个基本的概念。

切面 (aspect) 在系统中散落到系统各处并且不得不处理的事情,它是 一个关注点的模块化,这个关注点可能会横切多个对象,代表的是对象间的横向关系(比如:日志、事务,安全等)。

连接点 (joinpoint) 在程序的执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在 Spring AOP 中,一个 接点总是代表一个方法的执行。

通知 (advice) 在某个特定的连接点上执行的动作(也称为方法上执行的动作)。通知有各种类型,其中包括“ before”“after”“around”“throw” 四种类型。

切入点 (pointcut) 匹配连接点的规则。通知和一个 表达式关联,并在满足这个切入点的连接点上运行。

织入 (weave) 把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。 Spring 在运行时完成织入。

spring 2.0 中声明切面、通知等有两种方式:一种是配置 xml 文件的方式,一种是基于 @AspectJ 方式的,即 annotation 方式的。但是这种注解方式只适用于 Java 5 的版本,如果是 Java 5 以下版本,只能使用传统的 xml 方式。

 

以下实例演示了上述相关概念:

BookService.java

package com.chapter8.advices;

/**

* 本接口中定义业务方法

* @author Administrator

*

*/

public interface BookService {

/**

* 购书的业务方法

* @param userName 购买者

* @param bookName 书本名称

* @param price 价格

* @return boolean 是否订购成功

*/

public boolean buy(String userName , String bookName, double price);

/**

* 发表评论的业务方法

* @param userName 评论发表者

* @param comment 评论内容

* @return String

*/

public String comment(String userName, String comment);

/**

* 书本的订单信息

*

*/

public void bookOrder();

/**

* 书本客户信息

*

*/

public void bookCustomer();

}

 

BookServiceImpl.java

package com.chapter8.advices;

public class BookServiceImpl implements BookService {

public boolean buy(String userName, String bookName, double price) {

// TODO Auto-generated method stub

System. out .println( "buy 业务方法开始 " );

System. out

.println(userName + " 购买了图书 " + bookName + " 价格为: " + price);

System. out .println( "buy 业务方法结束 " );

return true ;

}

public String comment(String userName, String comment) {

// TODO Auto-generated method stub

System. out .println( "comment 业务方法开始 " );

System. out .println(userName + " 发表评论 : " + comment);

System. out .println( "comment 业务方法开始 " );

return "abc" ;

}

public void bookCustomer() {

// TODO Auto-generated method stub

System. out .println( " 执行业务方法 bookCustomer " );

}

public void bookOrder() {

// TODO Auto-generated method stub

System. out .println( " 执行业务方法 bookOrder " );

}

}

 

 

LogAfterAdvice.java

package com.chapter8.advices;

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.util.Arrays;

import java.util.Date;

import org.springframework.aop.AfterReturningAdvice;

/**

* 后置通知

*

* @author Administrator

*

*/

public class LogAfterAdvice implements AfterReturningAdvice {

/**

* 实现接口中的方法

*

* @param arg0

* 目标方法返回的值

* @param arg1

* 目标方法的名称

* @param arg2

* 被调方法的参数

* @return arg3 被调方法所属的对象实例

*/

public void afterReturning(Object arg0, Method arg1 , Object[] arg2,

Object arg3) throws Throwable {

// TODO Auto-generated method stub

SimpleDateFormat formate = new SimpleDateFormat();

String currentDate = formate.format( new Date());

System. out .println( "-------" + currentDate + " 在业务方法之后 ,执行 "

+ arg1 .getName() + " 参数为 " + Arrays. toString (arg2));

}

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值