公司要求分享技术,一个小组九个人,每周一个人,想想讲讲AOP吧,用处也挺大的,果断写了一个小例子,改了改也就成了。这是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。

目标对象的接口:IStudent.java

package  com.dragon.study;

/**

*  @author  ysm

*/

public   interface  IStudent  {

public   void  addStudent(String name);

}

目标类:StudentImpl.java

package  com.dragon.study.Impl;

import  com.dragon.study.IStudent;

/**

*  @author  ysm

*/

public   class  StudentImpl  implements  IStudent {

public   void  addStudent(String name) {

System.out.println( " 欢迎  " + name + "  加入Spring家庭! " );

}

}

前置通知:BeforeAdvice.java

package  com.dragon.Advice;

import  java.lang.reflect.Method;

import  org.springframework.aop.MethodBeforeAdvice;

/**

*  @author  ysm

*/

public   class  BeforeAdvice  implements  MethodBeforeAdvice {

public   void  before(Method method,Object[] args, Object target) throws  Throwable {

System.out.println( " 这是BeforeAdvice类的before方法. " );

}

}

后置通知:AfterAdvice.java

package com.dragon.Advice;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

/**

* @author ysm

*/

public class AfterAdvice implements AfterReturningAdvice{

public void afterReturning(Object returnValue ,Method method,Object[] args,Object target) throws Throwable{

System.out.println("这是AfterAdvice类的afterReturning方法.");

}

}

环绕通知:CompareInterceptor.java

package com.dragon.Advice;

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

/**

* @author ysm

*/

public class CompareInterceptor implements MethodInterceptor{

public Object invoke(MethodInvocation invocation) throws Throwable{

Object result = null;

String stu_name = invocation.getArguments()[0].toString();

if ( stu_name.equals("ysm")){

//如果学生是ysm时,执行目标方法,

result= invocation.proceed();

} else{

System.out.println("此学生是"+stu_name+"而不是ysm,不批准其加入.");

}

return result;

}

}

配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean>

<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean>

<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean>

<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean>

<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="proxyInterfaces">

<value>com.dragon.study.IStudent</value>

</property>

<property name="interceptorNames">

<list>

<value>beforeAdvice</value>

<value>afterAdvice</value>

<value>compareInterceptor</value>

</list>

</property>

<property name="target">

<ref bean="studenttarget"/>

</property>

</bean>

</beans>

现在开始写测试类,Test.java

package com;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.dragon.study.IStudent;

/**

* @author ysm

*/

public class Test {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

ApplicationContext ctx = new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");

IStudent person = (IStudent)ctx.getBean("student");

person.addStudent("ysm");

//person.addStudent("javadragon");

}

}

转载于:https://blog.51cto.com/yangsm/1427657

一个简单的Spring的AOP例子(JAVA面向切面编程)相关推荐

  1. Spring.NET学习笔记12——面向切面编程(基础篇) Level 300

    AOP即面向切面编程(Aspect Oriented Programming的缩写),是OOP(面向对象编程)的一种延续形式.是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添 ...

  2. java 切面 注解_Java自学之spring:使用注解进行面向切面编程(AOP)

    学习目的:学会使用注解进行面向切面编程(AOP),实现在面向切面编程(AOP)中,使用XML配置完成的操作. Part 1 修改cn.vaefun.dao.UserServiceImpl.java,在 ...

  3. Spring in Action 入门之面向切面编程AOP

    注明:这篇文章一是当成学习笔记,二是给大家提供另一个快速理解学习Spring的参考.欢迎留言讨论,持续更新中~ (该部分是Spring的面向切面编程AOP) 第四章 通知Bean 在软件编程中,散布于 ...

  4. 理解AOP思想(面向切面编程)

    本文旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正. 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是 ...

  5. java面向切面编程

    1.面向编程概念 AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程).它是面向对象 编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式.面 ...

  6. Spring(4)——面向切面编程(AOP模块)

    Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...

  7. Spring学习之AOP(面向切面编程)

    动态代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关 ...

  8. spring中AOP(面向切面编程)

    spring中AOP(面向切面编程) 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是spring框架中的一个重要内容 ...

  9. Spring核心AOP(面向切面编程)总结

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/75208354冷血之心的博客) 目录 1.AOP概念: 2.AOP特 ...

最新文章

  1. Ubuntu中基于QT的系统网线连接状态的实时监视
  2. 如何正确的对待设计模式——我的观点
  3. 产品经理在跨部门沟通中常见问题和解决办法[转自UCDChina]
  4. margin-top的百分比是相对父元素的哪个值
  5. 01基于配置文件方式的SpringMVC,三种HandlerMapping,三种控制器
  6. JMM如何解决顺序一致性问题-JMM层面的内存屏障
  7. Asp.net(C#)-显示所有缓存 清除所有缓存
  8. 大工13秋 c/c++语言程序设计 在线作业3,大工19秋《JavaScript基础教程与应用》在线作业3【满分答案】...
  9. editor.md七牛云上传图片springboot_spring boot 若依系统整合Ueditor,部署时候上传图片错误解决...
  10. 写弹窗时防止底层滚动
  11. MySQL查看数据库、表的占用空间大小
  12. Android系统中SD卡各文件夹名称功能详解
  13. for循环:100以内奇数之和
  14. 关于本地磁盘“介质受写入保护”的解决
  15. python 爬取《延禧攻略》所有的演员参演的电视剧
  16. 简化字与繁体字的关系
  17. 如何高逼格的写java代码
  18. 栅栏密码(The Rail-Fence Cipher)
  19. android常用控件实验报告,ui设计实验报告.doc
  20. 普渡大学计算机科学师生比,全美最强STEM大学排行榜出炉|这些学校竟然上榜了~...

热门文章

  1. ibatis解决sql注入问题 .
  2. linux cron读哪个文件,linux crontab 文件位置和日志位置
  3. 笔记本高分屏字体模糊_高色域+高分辨率轻薄本推荐,你需要2K屏笔记本电脑么?...
  4. python中ndarray如何生成单独的记事本文件_NumPy-快速处理数据--ndarray对象--数组的创建和存取...
  5. Linux-鸟菜-1-Linux简介
  6. POJ3228二分最大流
  7. 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
  8. 【Netty】零拷贝案例 ( transferTo | transferFrom )
  9. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
  10. SSH port forwarding: bind: Cannot assign requested address