开始Spring AOP的小理解

拿一个小例子来说吧!    老师上课   这样的例子!    老师上课--就是一个核心的业务!     那么上课之前需要点名,天气太热,需要开空调!

这个时候,一个老师太多事就做不来了(不是做不来,我一个老师来教书,又不是来打杂的,我讲我的课  其他的我不管)!

那么问题就出现了,这个杂碎的事情谁去做呢!  好的,这个时候,应该有另一个老师或者学生负责点名,另一个人负责开关空调什么的! 老师就可以做到只讲课了!

这样,放到小例子来就是,我想要执行一个核心的业务,其他事情就交给拦截器来做吧!   在我的核心业务执行之前或者之后都可能会有相应的拦截器去做其他的事了!

public class DianMingAdvice implements MethodBeforeAdvice
{ /**
* 点名类,增强
*
*
* 第一个参数是方法名,第二个参数是第一个参数方法的参数,第三个是代理对象
*/
@Override
public void before(Method method, Object[] arg1, Object target)
throws Throwable
{
System.out.println("开始点名!!!");
System.out.println("调用的方法名:"+method.getName());
} }

我首先定义了一个老师专门在讲师讲课之前就执行的拦截器,等我的拦截器执行后,我再执行我的核心业务(讲课)

public class Teacher
{
public void teach(String teachName,String course)
{
System.out.println(teachName+"老师开始上课: "+course);
}
}

我的Spring XML的配置文件是这样的(Spring1.0)

<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!-- 点名的老师类 -->
<bean id="lin" class="com.advice.DianMingAdvice" /> <!-- 开空调的类 -->
<bean id="wang" class="com.advice.OpenAdvice" /> <!-- 关空调的类 -->
<bean id="zhang" class="com.advice.CloseAirconditionAdvice" /> <!-- 核心业务对象,教师类 -->
<bean id="peng" class="com.test.Teacher" /> <!-- 利用Spring提供的代理对象,组装2对象,,target是一个代理 ref="peng" 是引用了这个类 -->
<bean id="pengProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="peng"></property> <!-- 定义了所有要拦截核心业务的方法对象advice -->
<property name="interceptorNames"> <!-- 具有顺序,因为XxxAdvice类所实现的接口的拦截顺序具有先后!XxxAdvice类所实现的接口相同那么就应该根据下列List中的顺序执行拦截 -->
<list>
<value>lin</value>
<value>wang</value>
<value>zhang</value>
</list>
</property>
</bean> </beans>

以上的工作都做好以后!  测试一下

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TeacherTest
{ public static void main(String[] args)
{
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher tc=(Teacher)context.getBean("pengProxy");
tc.teach("admin", "java");
} }

结果....开关空调的类没有放上来,跟点名的老师的类是一样的!    只是关闭空调的类的实现接口为AfterReturningAdvic--这是在下课后或者下课某一阶段(切点)执行的

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
开始点名!!!
调用的方法名:teach
开空调!
admin老师开始上课: java
上完课后关空调!!!

不对之处,还望大牛指正

简单的Spring1.0小配置的更多相关文章

  1. RDLC报表系列(一) 简单的动态数据绑定和配置

    RDLC系列链接 RDLC报表系列(一) 简单的动态数据绑定和配置  RDLC报表系列(二) 行分组 RDLC报表系列(三) 总计和折叠 RDLC报表系列(四) 矩阵 RDLC报表系列(五) 简单的图 ...

  2. redis5.0主从配置

    1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...

  3. Koa2+MySQL+VUE+ElementIUI搭建简单的后台管理小系统

    如题,前端入坑许久,还是写个小东西出来吧 想要搭建自己的一个后台管理,实现简单的增删改查,看起来很简单 其实是真的简单,没有想的那么难,我也就写了一个月吧, 当然是假的,其实也就每天一两个小时,花了大 ...

  4. Ubuntu14.10+cuda7.0+caffe配置

    转自:http://blog.csdn.net/lu597203933/article/details/46742199 Ubuntu14.10+cuda7.0+caffe配置 一:linux安装 L ...

  5. Apache2.2+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  6. Hibernate框架大配置关联小配置

    1 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-// ...

  7. Spark1.0.0 属性配置

    1:Spark1.0.0属性配置方式       Spark属性提供了大部分应用程序的控制项,而且能够单独为每一个应用程序进行配置.       在Spark1.0.0提供了3种方式的属性配置: Sp ...

  8. python实现简单的循环购物车小功能

    python实现简单的循环购物车小功能 # -*- coding: utf-8 -*- __author__ = 'hujianli' shopping = [ ("iphone6s&quo ...

  9. spring-data-redis2.0以上配置redis连接

    1.所需的maven依赖 <dependency> <groupId>org.springframework.data</groupId> <artifact ...

随机推荐

  1. Docker Stack 学习笔记

    该文为<深入浅出Docker>的学习笔记,感谢查看,如有错误,欢迎指正 一.简介 Docker Stack 是为了解决大规模场景下的多服务部署和管理,提供了期望状态,滚动升级,简单易用,扩 ...

  2. [菜b]Isaunoya 的一些学习笔记…[保持咕咕咕]

    fread/fwrite标记永久化 分块 树链剖分 莫比乌斯反演 斜率优化/单调队列 kruskal重构树 回滚莫队 可持久化线段树/trie树 Link-Cut-Tree dsu on tree F ...

  3. 三维重建(一):colmap安装与使用

    Image-based 3D Reconstruction from Scratch (using COLMAP) 本文将介绍COLMAP的安装与使用,重点介绍3D重建过程中每个步骤的输入输出. 一. ...

  4. css过渡——实现元素的飞入飞出

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【终端使用】"scp"命令,远程拷贝文件

    一."scp"命令的使用 "scp"命令,是"secure copy (remote file copy program)"英文单词的缩写, ...

  6. ArcScene 创建三维模型数据

    1. 拉伸 添加面元素图层 在图层上右键----属性 , 设置拉伸值,可以输入固定值或者选择字段值. 2. 导入   3DMAX 的 3ds 文件,和 Google SketchUp 的skp文件, ...

  7. H5_0018:z-index失效的原因

    在做的过程中,发现了一个很简单却又很多人应该碰到的问题,设置Z-INDEX属性无效. 在CSS中,只能通过代码改变层级,这个属性就是z-index, 要让z-index起作用有个小小前提,就是元素的p ...

  8. Git常用命令简记

    创建仓库 添加需要版本控制的文件到仓库中 提交到版本库 修改位于顶端的commit的日志 分支管理 版本回退 切换与合并分支 本地版本库与远程关联 克隆 Tag的使用 问题与解决 创建git仓库 gi ...

  9. ZedGraph怎样实现将图形右键菜单的打印和页面设置合并为打印的二级子菜单

    场景 Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  10. ubuntu设置ulimit

    centos系统的设置ulimit的时候是直接修改/etc/security/limits.conf文件,但是在ubuntu中却不行, ubuntu先修改/etc/security/limits.co ...