浅谈Spring静态切入点使用方法[转]
所谓Spring静态切入点,相对于动态切入点来说,具有良好的性能,因为静态切入点只在代理创建时候执行一次,而不是在运行期间,每次目标方法执行前都进行执行,下面,以实例说明如何定义静态切入点
?
看我我前一篇blog的朋友都知道,如果不定义切入点,通知方法是会对整个目标类的所有方法均进行切入的
但实际需求中,我们可能对其中的几个方法执行A通知,对其他的方法执行B通知,这时候,就需要通过定义不同的切入点来进行区分
目标接口:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
package?StaticAdvisorTest;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327864.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327865.gif)
public?interface?Shopping?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??public?String?buySomething(String?type);
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??public?String?buyAnything(String?type);
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??public?String?sellSomething(String?type);
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??public?String?sellAnything(String?type);
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327867.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?javabean:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
package?StaticAdvisorTest;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327864.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327865.gif)
public?class?Customer?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??private?String?name;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??private?String?age;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
??public?Customer()...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??????
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
??}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
??public?Customer(String?name,String?age)...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??????this.name=name;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
??????this.age=age;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
??}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
public?String?getAge()?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????return?age;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
public?void?setAge(String?age)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????this.age?=?age;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
public?String?getName()?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????return?name;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
public?void?setName(String?name)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????this.name?=?name;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327867.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?
业务目标实现类:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
package?StaticAdvisorTest;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327864.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327865.gif)
public?class?ShoppingImpl?implements?Shopping?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????private?Customer?customer;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?Customer?getCustomer()?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????return?customer;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?void?setCustomer(Customer?customer)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????this.customer?=?customer;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?String?buySomething(String?type)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????System.out.println(this.getCustomer().getName()+"?bye?"+type+"?success");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????return?null;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?String?buyAnything(String?type)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
???????System.out.println(this.getCustomer().getName()+"?bye?"+type+"?success");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
???????return?null;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
?????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?String?sellAnything(String?type)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????System.out.println(this.getCustomer().getName()+"?sell?"+type+"?success");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????return?null;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?String?sellSomething(String?type)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
?????????System.out.println(this.getCustomer().getName()+"?sell?"+type+"?success");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
???????????return?null;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327867.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?
通知(切面)方法:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
package?StaticAdvisorTest;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?java.lang.reflect.Method;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?org.springframework.aop.MethodBeforeAdvice;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
//前置通知
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327864.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327865.gif)
public?class?WelcomeAdvice?implements?MethodBeforeAdvice?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????public?void?before(Method?method,?Object[]?args,?Object?obj)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????????????throws?Throwable?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????String?type=(String)args[0];
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????System.out.println("Hello?welcome?to?buy?"+type);
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327870.gif)
????}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327867.gif)
}
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?
下面是重点,我们想对所有的buy方法进行通知处理,也就是在所有的buy方法上定义切面
spring为我们创建了静态切入点的父类 StaticMethodMatcherPointCut ,如果我们想实现自制的静态切入点,只要继承这个类就可以了,不过一般情况下,我们使用spring提供的静态切入点NameMatchMethodPointCut就足够了
配置文件如下:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<?xml?version="1.0"?encoding="UTF-8"?>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"?>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<beans>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?<bean?id="customer"?class="StaticAdvisorTest.Customer">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
???<constructor-arg?index="0">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?????<value>gaoxiang</value>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
???</constructor-arg>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<constructor-arg?index="1">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?????<value>26</value>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
???</constructor-arg>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?</bean>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?<bean?id="shoppingImpl"?class="StaticAdvisorTest.ShoppingImpl">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
???<property?name="customer">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?????<ref?local="customer"/>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
???</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?</bean>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<!--?定义通知?-->
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<bean?id="shoppingAdvise"?class="StaticAdvisorTest.WelcomeAdvice"></bean>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<!--?定义切入点?-->
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<bean?id="shoppingPointCutAdvisor"?class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??<property?name="mappedName">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<value>sell*</value>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??<property?name="advice">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<ref?bean="shoppingAdvise"/>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
</bean>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<!--?定义代理?-->
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
<bean?id="StaticAdvisorTest"?class="org.springframework.aop.framework.ProxyFactoryBean">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??<property?name="proxyInterfaces">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<value>StaticAdvisorTest.Shopping</value>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??<property?name="interceptorNames">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<list>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??????<value>shoppingPointCutAdvisor</value>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????</list>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??<property?name="target">
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
????<ref?bean="shoppingImpl"/>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
??</property>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
</bean>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
</beans>
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
?<!-- 如果不使用通配符,则用以下表达
? <property name="mappedNames">
??? <list>
?????? <value>sellSomething</value>
?????? <value>sellAnything</value>
??? </list>
? </property>
? -->
测试程序:
?
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
package?StaticAdvisorTest;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?java.io.File;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?org.springframework.beans.factory.BeanFactory;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?org.springframework.beans.factory.xml.XmlBeanFactory;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
import?org.springframework.core.io.FileSystemResource;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327863.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327864.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327865.gif)
public?class?TestAdvisor?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327868.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327869.gif)
????public?static?void?main(String[]?args)?...{
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????String?filePath=System.getProperty("user.dir")+File.separator+"StaticAdvisorTest"+File.separator+"hello.xml";
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????BeanFactory?factory=new?XmlBeanFactory(new?FileSystemResource(filePath));
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????Shopping?shopping=null;
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????shopping=(Shopping)factory.getBean("StaticAdvisorTest");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????shopping.buySomething("something");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????shopping.buyAnything("anything");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????shopping.sellAnything("anything");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????shopping.sellSomething("something");
![浅谈Spring静态突破点使用方法[转]](//img.reader8.net/uploadfile/jiaocheng/20140188/3013/20140130131327866.gif)
????????