首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

aop容易注解实现例程

2012-09-18 
aop简单注解实现例程Aop一些的概念a)Cross Cutting Concern是一种独立的服务,它会遍布在系统的整个处理流

aop简单注解实现例程

Aop一些的概念

a)       Cross Cutting Concern

     是一种独立的服务,它会遍布在系统的整个处理流程中

b)       Aspect

    对横切关注点的模块化,在spring aop中,切面可以使用普通的类或者在普通类中以@Aspect注解类实现

c)       Advice(通知)

    对横切性关注点的具体实现,有before和after等类型

d)       Pointcut(切入点)

          它定义了Advice应用到那些JoinPoint上,对Spring来说就是方法的调用

e)       Weave(织入)

  将通知应用到Target Object上的过程

f)        Target Object

   Advice被应用的对象,这个对象永远是一个被代理(proxied)的对象

********************************************************************************

第一步:将横切关注点模块化,建立AspectJText类,并采用注解指定该类为Aspect,

@Aspectpublic class AspectJText {/** * 定义Pointcut,Pointcut的名称为addAddMethod(), * 此方法没有返回值和参数 * 该方法就是一个标识,不进行调用 * * add*(..),代表执行所有带add的方法, * 括号里的表示任意个参数, * 当然可以不含参数 */@Pointcut("execution(* add*(..))")private void addAddMethod(){//注意执行的过程中,该句子不会打印出来,印证了该方法不会被调用System.out.println("我不会被调用");};/** * 定义Advice,表示我们的Advice应用到哪些Pointcut订阅的Joinpoint上 */@Before("addAddMethod()")private void befreExecuteTargetMethod() {System.out.println("在调用目标方法之前调用我");}@After("addAddMethod()")private void afterExecuteTargetMethod(){System.out.println("在调用目标方法之后调用我");}}


第二步,启用AspectJ对Annotation的支持,并将目标类添加到IOC容器中,下面值spring中applicationContext.xml的配置文件

<?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:aop="http://www.springframework.org/schema/aop"     xmlns:tx="http://www.springframework.org/schema/tx"     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">               <!-- 启用AspectJ对Annotation的支持 -->       <aop:aspectj-autoproxy/>           <bean id="ati" class="com.bjpowernode.spring.AddTextImpl"/><bean id="ajt" class="com.bjpowernode.spring.AspectJText"/></beans>

第三步,添加包含add字符方法的接口

 

/** * 测试所有带有add的方法 * @author Arthur * */public interface AddText {public void add();public void add1();public void textadd();public void add(String str);public void add(String str,String str1);}


第四步,定义接口的实现类

package com.bjpowernode.spring;public class AddTextImpl implements AddText {@Overridepublic void add() {System.out.println("---add---");}@Overridepublic void add(String str) {System.out.println("---add---" + str);}@Overridepublic void add(String str, String str1) {System.out.println("---add---" + str + "----" + str1);}@Overridepublic void add1() {System.out.println("---add1---");}@Overridepublic void textadd() {System.out.println("---textadd---");}   }


第五步,客户端的实现

public class Client {

 public static void main(String[] args) {
  BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
  AddText at = (AddText)factory.getBean("ati");
  at.add();
  System.out.println("*******************");
  at.add1();
  System.out.println("*******************");
  at.add("一个参数的方法");
  System.out.println("*******************");
  at.add("参数一","参数2");
 }

}

**************************************************************

下面是运行的结果

在调用目标方法之前调用我
---add---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add1---
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---一个参数的方法
在调用目标方法之后调用我
*******************
在调用目标方法之前调用我
---add---参数一----参数2
在调用目标方法之后调用我

热点排行