SpringAOP简单例子
这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象。写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东。
目标对象的接口:IStudent.java
/** */ /** 2
* 3
*/ 4
package com.dragon.study;5
6
/** */ /** 7
* @author dragon8
*9
*/ 10
public interface IStudent
{11
12
public void addStudent(String name);13
} 14
目标类:StudentImpl.java
/** */ /** 2
* 3
*/ 4
package com.dragon.study.Impl;5
6
import com.dragon.study.IStudent;7
8
/** */ /** 9
* @author dragon10
*11
*/ 12
public class StudentImpl implements IStudent
{13
14
public void addStudent(String name)
{15
System.out.println( " 欢迎 " + name + " 你加入Spring家庭! " );16
} 17
} 18
前置通知:BeforeAdvice.java
/** */ /** 2
* 3
*/ 4
package com.dragon.Advice;5
6
import java.lang.reflect.Method;7
8
import org.springframework.aop.MethodBeforeAdvice;9
10
/** */ /** 11
* @author dragon12
*13
*/ 14
public class BeforeAdvice implements MethodBeforeAdvice
{15
16
public void before(Method method,Object[] args, Object target)17
throws Throwable
{18
19
System.out.println( " 这是BeforeAdvice类的before方法. " );20
21
} 22
} 23
后置通知:AfterAdvice.java

/** *//**2
* 3
*/4
package com.dragon.Advice;5

6
import java.lang.reflect.Method;7

8
import org.springframework.aop.AfterReturningAdvice;9

10

/** *//**11
* @author dragon12
*13
*/14

public class AfterAdvice implements AfterReturningAdvice
{15
16
public void afterReturning(Object returnValue ,Method method,17

Object[] args,Object target) throws Throwable
{18
System.out.println("这是AfterAdvice类的afterReturning方法.");19
}20
21

22
}23

环绕通知:CompareInterceptor.java

/** *//**2
* 3
*/4
package com.dragon.Advice;5

6
import org.aopalliance.intercept.MethodInterceptor;7
import org.aopalliance.intercept.MethodInvocation;8

9

10

/** *//**11
* @author dragon12
*13
*/14

public class CompareInterceptor implements MethodInterceptor
{15

16

public Object invoke(MethodInvocation invocation) throws Throwable
{17
Object result = null;18
String stu_name = invocation.getArguments()[0].toString();19

if ( stu_name.equals("dragon"))
{20
//如果学生是dragon时,执行目标方法,21
result= invocation.proceed();22
23

} else
{24
System.out.println("此学生是"+stu_name+"而不是dragon,不批准其加入.");25
}26
27
return result;28
}29
}30

配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>2
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">3

4
<beans>5

6
<bean id="beforeAdvice" class="com.dragon.Advice.BeforeAdvice"></bean>7
<bean id="afterAdvice" class="com.dragon.Advice.AfterAdvice"></bean>8
<bean id="compareInterceptor" class="com.dragon.Advice.CompareInterceptor"></bean>9
<bean id="studenttarget" class="com.dragon.study.Impl.StudentImpl"></bean>10

11
<bean id="student" class="org.springframework.aop.framework.ProxyFactoryBean">12
<property name="proxyInterfaces">13
<value>com.dragon.study.IStudent</value>14
</property>15
<property name="interceptorNames">16
<list>17
<value>beforeAdvice</value>18
<value>afterAdvice</value>19
<value>compareInterceptor</value> 20
</list>21
</property>22
<property name="target">23
<ref bean="studenttarget"/>24
</property>25

26
</bean>27

28

29

30

31
</beans>现在开始写测试类,Test.java

/** *//**2
* 3
*/4
package com;5

6
import org.springframework.context.ApplicationContext;7
import org.springframework.context.support.FileSystemXmlApplicationContext;8

9
import com.dragon.study.IStudent;10

11

/** *//**12
* @author dragon13
*14
*/15

public class Test
{16

17

/** *//**18
* @param args19
*/20

public static void main(String[] args)
{21
// TODO Auto-generated method stub22
ApplicationContext ctx = 23
new FileSystemXmlApplicationContext("/com/dragon/applicationContext.xml");24
25
IStudent person = (IStudent)ctx.getBean("student");26
person.addStudent("dragon");27
28
// person.addStudent("javadragon");29
}30

31
}32

SpringAOP简单例子的更多相关文章
- Spring框架系列(2) - Spring简单例子引入Spring要点
上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...
- Hibernate4.2.4入门(一)——环境搭建和简单例子
一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- spring mvc(注解)上传文件的简单例子
spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...
- ko 简单例子
Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...
- mysql定时任务简单例子
mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9 如果要每30秒执行以下语句: [sql] update userinfo set endtime = now() WHE ...
- java socket编程开发简单例子 与 nio非阻塞通道
基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
随机推荐
- springmvc学习笔记(全)
SpringMVC简介 什么是MVC MVC是一种软件架构的思想,将软件按照模型.视图.控制器来划分 M: Model:模型层,指工程中的JavaBean,作用是处理数据.JavaBean分为两类: ...
- asp.net中挺高性能的24种方法
那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...
- Docker部署 Mysql .Net6等容器
Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...
- [cf700D]Huffman Coding on Segment
令$tot_{i}$为区间$[l,r]$中满足$a_{j}=i$的$j$的个数,将所有非0的$tot_{i}$取出,得到可重集$S$ 显然,有以下贪心:不断取出$S$中最小的两个元素,删除这两个元素并 ...
- [cf461E]Appleman and a Game
考虑我的每一次添加操作,要满足:1.该串是t的子串:2.该串不能与下一次的串开头字母构成t的子串.那么,设f[i][j][k]表示拼i次,第i次填入的开头字母是j,第i+1填入的开头字母是k的最短长度 ...
- [loj3180]天桥
考虑将所有交点作为关键点来建图跑最短路,但图上的关键点数量最坏为$o(nm)$,需要优化 当$s=0$且$g=n-1$的部分分,有以下结论: 1.对于一段天桥$([l,r],y)$,不会从$(r,y) ...
- MS17-010漏洞利用
MS17-010漏洞利用 1.安装虚拟机win7 x64,实现利用ms17-010实现对其win7 x64主机开始渗透,查看该主机信息,打开远程桌面,抓取用户名和密码并破译,创建一个 : 学号.txt ...
- Codeforces 1375F - Integer Game(交互)
Codeforces 题面传送门 & 洛谷题面传送门 一个奇怪的做法. 首先我们猜测答案总是 First.考虑什么样的情况能够一步把对方一步干掉.方便起见我们假设 \(a<b<c\ ...
- pycurl报错: ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend
报错: ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl ...
- cd-hit 去除冗余序列
最近一篇NG中使用到的软件,用来去除冗余的contigs,现简单记录. CD-HIT早先是一个蛋白聚类的软件,其主要的特定就是快!(ps:不是所有快的都是好的) 其去除冗余序列的大概思路就是: 首先对 ...