好久没有继续spring的学习了。今日心血来潮!
现在学到spring的AOP。光是看书上的代码觉得谜团重重。所以打算整理一下思路,我学习东西最讨厌一头雾水了。这几天总是被beforeMethod之类的东西搞成这样。一气之下花了一个钟整理思路,探索机制的问题。
从我的配置文件(beans-config.xml)开始吧。
1、有一个程序用到配置文件
new FileSystemXmlApplicationContext(
" beans-config.xml " );
这样我们就用到spring的对象加工工厂啦。给它一个配置文件就可以叫它配制出我们想要的类。
2、在来看看配置文件
<! DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
< bean id ="logBeforeAdvice"
class ="onlyfun.caterpillar.LogBeforeAdvice" />
< bean id ="helloSpeaker"
class ="onlyfun.caterpillar.HelloSpeaker" />
< bean id ="helloProxy"
class ="org.springframework.aop.framework.ProxyFactoryBean" >
< property name ="proxyInterfaces" >
< value > onlyfun.caterpillar.IHello </ value >
</ property >
< property name ="target" >
< ref bean ="helloSpeaker" />
</ property >
< property name ="interceptorNames" >
< list >
< value > logBeforeAdvice </ value >
</ list >
</ property >
</ bean >
</ beans >
这里定义了3个实例。工厂就会按照这个图纸来加工零件。加工的3个零件如下:可以看到一个大零件还需要两个小零件的配合。
proxyInterfaces指向接口IHello。指向接口的用意应该是想要多态吧~~这样target只要实现了IHello就可以。
target指向另外一个零件helloSpeaker,这个类需要实现上面指向的接口。就是需要有监视器想要监视的方法。
interceptorNames指向第三个零件logBeforeAdvice。这个类需要实现MethodBeforeAdvice接口,这样才有监视器的功能。它要监视的对象就是target指向的实例。监视的方法则是proxyInterfaces指向的接口拥有的所有方法。只要当这些方法被调用,监视器就会调用before()方法实现监视触发事件处理。
3、工厂加工好了的零件,主人现在要拿回来了。
(IHello) context.getBean( " helloProxy " ); // 返回一个带监视器的对象引用
4、现在我们可以照常用自己定义的零件了。不过每次使用的时候,监视器都会有小动作,谁叫你去那家工厂加工零件的呢?
注:这里没有探讨监视去到底是怎么运行的。初学的只需要把它当做黑合处理。