开始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. SP10707 COT2 - Count on a tree II [树上莫队学习笔记]

    树上莫队就是把莫队搬到树上-利用欧拉序乱搞.. 子树自然是普通莫队轻松解决了 链上的话 只能用树上莫队了吧.. 考虑多种情况 [X=LCA(X,Y)] [Y=LCA(X,Y)] else void d ...

  2. cf1184E1

    题意简述:给出n个点m条边的无向图,你可以修改第一条边的权值,使得他可能会处于一棵最小生成树中,问你第一条的权值最大(不超过1e9)可以改为多少 题解:不去使用第一条边去跑最小生成树,然后在跑的过程中 ...

  3. word中模板的使用

    新建一个word文档,修改样式库中的样式,比如各章节的标题正式格式.设计好后,将文件保存为word模板. 一般自定义的模板默认保存在”C:\Users\lizhe\Documents\自定义 Offi ...

  4. 吴裕雄--天生自然HADOOP操作实验学习笔记:mapreduce和yarn命令

    实验目的 了解集群运行的原理 学习mapred和yarn脚本原理 学习使用Hadoop命令提交mapreduce程序 学习对mapred.yarn脚本进行基本操作 实验原理 1.hadoop的shel ...

  5. C语言 杂货整理

    C语言 杂货整理 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include ...

  6. Java中List的父类与子类如何转换?

    目录 定义 要点: 子类转父类 父类转子类 定义 A是B的子类,A比B多几条属性 要点: A是B的子类,但List<A>不是List<B>的子类.所以想直接转换是不行的. 子类 ...

  7. windows的系统变量

    在Windows cmd小黑框里输入set命令,可以查看现有的系统变量 “="前的部分就是变量名. %USERPROFILE% =C:\Users\用户名 %SystemRoot% =C:\ ...

  8. Avro介绍

    Avro介绍   Apache Avro是一个数据序列化系统. Avro所提供的属性: 1.丰富的数据结构2.使用快速的压缩二进制数据格式3.提供容器文件用于持久化数据4.远程过程调用RPC5.简单的 ...

  9. Redis事务与可分布式锁

    1    Redis事务 1.1   Redis事务介绍 l  Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成的. l  Redis的单个命令都是原子性的,所以 ...

  10. 今日头条 SEO 研究,值得深思的 5 个问题

    在做SEO的过程中,实际上,我并不是“技术挂”更多的是基于搜索原理与大量的实战,总结相关的经验,这么多年,经常养成一个小习惯,总是记录一些工作中遇到的一些小问题与小技巧. 特别是2017年,12月份开 ...