开始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. Openshift部署流程介绍

    背景 Openshift是一个开源容器云平台,是一个基于主流的容器技术Docker和Kubernetes构建的云平台.Openshift底层以Docker作为容器引擎驱动,以Kubernetes 作为 ...

  2. docker之阿里云centos 7.x 启动容器报错处理办法

    最近阿里云服务器(操作系统centOS 7.x) 安装docker,参照阿里云帮助文档https://help.aliyun.com/document_detail/51853.html?spm=a2 ...

  3. windows服务踩的坑

    最近写了一个windows服务 有一些bug最后终于解决了还是写点经验把. 第一点.版本问题,因为是小白,第一次写windows服务,选择的是.net4.6.1的目标框架,因为我的电脑是windows ...

  4. 导航贴 | IT Crypt 密码学优秀博文

    Base64编码: 什么是Base64? 一篇文章彻底弄懂Base64编码原理 Morse密码: 看似神秘,实则简单的装逼利器-摩斯密码 Bacon 密码: 密码学笔记 -- 培根密码 RSA 加密: ...

  5. fatal error LNK1169: one or more multiply defined symbols found

    在 Project/Setting/Link/General中的 Project Options: 加入 /FORCE:MULTIPLE即可")可以解决报错问题,但是这些问题全部变成了war ...

  6. BundlePhobia

    1.BundlePhobia用于分析npm package的依赖.bundle后的大小.下载速度预估等等,帮助你在引用一个package之前了解引入该package的代价. 2.也可以将项目的pack ...

  7. linux安装Nginx 以及 keepalived 管理Nginx

    linux安装Nginx 1.1将Nginx素材内容上传到/usr/local目录(pcre,zlib,openssl,nginx)(注意:必须登录用对这个文件具有操作权限的) 1.2安装pcre库 ...

  8. 将smarty安装到MVC架构中

    首先是composer.json { "require": { "smarty/smarty": "^3.1" }, // 自动加载 // ...

  9. 【spring boot】SpringBoot初学(3)– application配置和profile隔离配置

    前言 github: https://github.com/vergilyn/SpringBootDemo 说明:我代码的结构是用profile来区分/激活要加载的配置,从而在一个project中写各 ...

  10. Spring boot项目的打包发布

    Eclipse打包发布项目 打包项目 首先需要将项目编译的文件删除,执行[Run As]->[Maven clean] 如果这个时候项目报错,在pom.xml文件中添加以下代码过滤掉单元测试 & ...