好久没有继续spring的学习了。今日心血来潮!
现在学到spring的AOP。光是看书上的代码觉得谜团重重。所以打算整理一下思路,我学习东西最讨厌一头雾水了。这几天总是被beforeMethod之类的东西搞成这样。一气之下花了一个钟整理思路,探索机制的问题。
从我的配置文件(beans-config.xml)开始吧。
1、有一个程序用到配置文件
ApplicationContext context =
new FileSystemXmlApplicationContext(
"beans-config.xml");这样我们就用到spring的对象加工工厂啦。给它一个配置文件就可以叫它配制出我们想要的类。
2、在来看看配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!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 helloProxy =
(IHello) context.getBean("helloProxy");//返回一个带监视器的对象引用4、现在我们可以照常用自己定义的零件了。不过每次使用的时候,监视器都会有小动作,谁叫你去那家工厂加工零件的呢?
注:这里没有探讨监视去到底是怎么运行的。初学的只需要把它当做黑合处理。
本文介绍了一个基于Spring框架的面向切面编程(AOP)的应用案例。通过解析配置文件和创建代理对象,展示了如何利用Spring AOP实现方法前的拦截功能。
154

被折叠的 条评论
为什么被折叠?



