首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

浅谈Spring静态突破点使用方法[转]

2012-10-06 
浅谈Spring静态切入点使用方法[转]所谓Spring静态切入点,相对于动态切入点来说,具有良好的性能,因为静态切

浅谈Spring静态切入点使用方法[转]

所谓Spring静态切入点,相对于动态切入点来说,具有良好的性能,因为静态切入点只在代理创建时候执行一次,而不是在运行期间,每次目标方法执行前都进行执行,下面,以实例说明如何定义静态切入点

?

看我我前一篇blog的朋友都知道,如果不定义切入点,通知方法是会对整个目标类的所有方法均进行切入的
但实际需求中,我们可能对其中的几个方法执行A通知,对其他的方法执行B通知,这时候,就需要通过定义不同的切入点来进行区分

目标接口:

?

浅谈Spring静态突破点使用方法[转]package?StaticAdvisorTest;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?interface?Shopping?...{
浅谈Spring静态突破点使用方法[转]??public?String?buySomething(String?type);
浅谈Spring静态突破点使用方法[转]??public?String?buyAnything(String?type);
浅谈Spring静态突破点使用方法[转]??public?String?sellSomething(String?type);
浅谈Spring静态突破点使用方法[转]??public?String?sellAnything(String?type);
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]

?javabean:

?

浅谈Spring静态突破点使用方法[转]package?StaticAdvisorTest;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?class?Customer?...{
浅谈Spring静态突破点使用方法[转]??private?String?name;
浅谈Spring静态突破点使用方法[转]??private?String?age;
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]??public?Customer()...{
浅谈Spring静态突破点使用方法[转]??????
浅谈Spring静态突破点使用方法[转]??}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]??public?Customer(String?name,String?age)...{
浅谈Spring静态突破点使用方法[转]??????this.name=name;
浅谈Spring静态突破点使用方法[转]??????this.age=age;
浅谈Spring静态突破点使用方法[转]??}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?String?getAge()?...{
浅谈Spring静态突破点使用方法[转]????return?age;
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?void?setAge(String?age)?...{
浅谈Spring静态突破点使用方法[转]????this.age?=?age;
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?String?getName()?...{
浅谈Spring静态突破点使用方法[转]????return?name;
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?void?setName(String?name)?...{
浅谈Spring静态突破点使用方法[转]????this.name?=?name;
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]

?

业务目标实现类:

?

浅谈Spring静态突破点使用方法[转]package?StaticAdvisorTest;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?class?ShoppingImpl?implements?Shopping?...{
浅谈Spring静态突破点使用方法[转]????private?Customer?customer;
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?Customer?getCustomer()?...{
浅谈Spring静态突破点使用方法[转]????????return?customer;
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?void?setCustomer(Customer?customer)?...{
浅谈Spring静态突破点使用方法[转]????????this.customer?=?customer;
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?String?buySomething(String?type)?...{
浅谈Spring静态突破点使用方法[转]????????System.out.println(this.getCustomer().getName()+"?bye?"+type+"?success");
浅谈Spring静态突破点使用方法[转]????????return?null;
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]????
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?String?buyAnything(String?type)?...{
浅谈Spring静态突破点使用方法[转]???????System.out.println(this.getCustomer().getName()+"?bye?"+type+"?success");
浅谈Spring静态突破点使用方法[转]???????return?null;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]?????}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?String?sellAnything(String?type)?...{
浅谈Spring静态突破点使用方法[转]????????System.out.println(this.getCustomer().getName()+"?sell?"+type+"?success");
浅谈Spring静态突破点使用方法[转]????????return?null;
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?String?sellSomething(String?type)?...{
浅谈Spring静态突破点使用方法[转]?????????System.out.println(this.getCustomer().getName()+"?sell?"+type+"?success");
浅谈Spring静态突破点使用方法[转]???????????return?null;
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]

?

通知(切面)方法:

?

浅谈Spring静态突破点使用方法[转]package?StaticAdvisorTest;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]import?java.lang.reflect.Method;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]import?org.springframework.aop.MethodBeforeAdvice;
浅谈Spring静态突破点使用方法[转]//前置通知
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?class?WelcomeAdvice?implements?MethodBeforeAdvice?...{
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]????public?void?before(Method?method,?Object[]?args,?Object?obj)
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????????????throws?Throwable?...{
浅谈Spring静态突破点使用方法[转]????????String?type=(String)args[0];
浅谈Spring静态突破点使用方法[转]????????System.out.println("Hello?welcome?to?buy?"+type);
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]????}
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]}
浅谈Spring静态突破点使用方法[转]

?

下面是重点,我们想对所有的buy方法进行通知处理,也就是在所有的buy方法上定义切面

spring为我们创建了静态切入点的父类 StaticMethodMatcherPointCut ,如果我们想实现自制的静态切入点,只要继承这个类就可以了,不过一般情况下,我们使用spring提供的静态切入点NameMatchMethodPointCut就足够了

配置文件如下:

?

浅谈Spring静态突破点使用方法[转]<?xml?version="1.0"?encoding="UTF-8"?>
浅谈Spring静态突破点使用方法[转]<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"?>
浅谈Spring静态突破点使用方法[转]<beans>
浅谈Spring静态突破点使用方法[转]?<bean?id="customer"?class="StaticAdvisorTest.Customer">
浅谈Spring静态突破点使用方法[转]???<constructor-arg?index="0">
浅谈Spring静态突破点使用方法[转]?????<value>gaoxiang</value>
浅谈Spring静态突破点使用方法[转]???</constructor-arg>
浅谈Spring静态突破点使用方法[转]????<constructor-arg?index="1">
浅谈Spring静态突破点使用方法[转]?????<value>26</value>
浅谈Spring静态突破点使用方法[转]???</constructor-arg>
浅谈Spring静态突破点使用方法[转]?</bean>
浅谈Spring静态突破点使用方法[转]?<bean?id="shoppingImpl"?class="StaticAdvisorTest.ShoppingImpl">
浅谈Spring静态突破点使用方法[转]???<property?name="customer">
浅谈Spring静态突破点使用方法[转]?????<ref?local="customer"/>
浅谈Spring静态突破点使用方法[转]???</property>
浅谈Spring静态突破点使用方法[转]?</bean>
浅谈Spring静态突破点使用方法[转]<!--?定义通知?-->
浅谈Spring静态突破点使用方法[转]<bean?id="shoppingAdvise"?class="StaticAdvisorTest.WelcomeAdvice"></bean>
浅谈Spring静态突破点使用方法[转]<!--?定义切入点?-->
浅谈Spring静态突破点使用方法[转]<bean?id="shoppingPointCutAdvisor"?class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
浅谈Spring静态突破点使用方法[转]??<property?name="mappedName">
浅谈Spring静态突破点使用方法[转]????<value>sell*</value>
浅谈Spring静态突破点使用方法[转]??</property>
浅谈Spring静态突破点使用方法[转]??<property?name="advice">
浅谈Spring静态突破点使用方法[转]????<ref?bean="shoppingAdvise"/>
浅谈Spring静态突破点使用方法[转]??</property>
浅谈Spring静态突破点使用方法[转]</bean>
浅谈Spring静态突破点使用方法[转]<!--?定义代理?-->
浅谈Spring静态突破点使用方法[转]<bean?id="StaticAdvisorTest"?class="org.springframework.aop.framework.ProxyFactoryBean">
浅谈Spring静态突破点使用方法[转]??<property?name="proxyInterfaces">
浅谈Spring静态突破点使用方法[转]????<value>StaticAdvisorTest.Shopping</value>
浅谈Spring静态突破点使用方法[转]??</property>
浅谈Spring静态突破点使用方法[转]??<property?name="interceptorNames">
浅谈Spring静态突破点使用方法[转]????<list>
浅谈Spring静态突破点使用方法[转]??????<value>shoppingPointCutAdvisor</value>
浅谈Spring静态突破点使用方法[转]????</list>
浅谈Spring静态突破点使用方法[转]??</property>
浅谈Spring静态突破点使用方法[转]??<property?name="target">
浅谈Spring静态突破点使用方法[转]????<ref?bean="shoppingImpl"/>
浅谈Spring静态突破点使用方法[转]??</property>
浅谈Spring静态突破点使用方法[转]</bean>
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]</beans>
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]

?<!-- 如果不使用通配符,则用以下表达
? <property name="mappedNames">
??? <list>
?????? <value>sellSomething</value>
?????? <value>sellAnything</value>
??? </list>
? </property>
? -->

测试程序:

?

浅谈Spring静态突破点使用方法[转]package?StaticAdvisorTest;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]import?java.io.File;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]import?org.springframework.beans.factory.BeanFactory;
浅谈Spring静态突破点使用方法[转]import?org.springframework.beans.factory.xml.XmlBeanFactory;
浅谈Spring静态突破点使用方法[转]import?org.springframework.core.io.FileSystemResource;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]public?class?TestAdvisor?...{
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]浅谈Spring静态突破点使用方法[转]????public?static?void?main(String[]?args)?...{
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]????????String?filePath=System.getProperty("user.dir")+File.separator+"StaticAdvisorTest"+File.separator+"hello.xml";
浅谈Spring静态突破点使用方法[转]????????
浅谈Spring静态突破点使用方法[转]????????BeanFactory?factory=new?XmlBeanFactory(new?FileSystemResource(filePath));
浅谈Spring静态突破点使用方法[转]????????
浅谈Spring静态突破点使用方法[转]????????Shopping?shopping=null;
浅谈Spring静态突破点使用方法[转]
浅谈Spring静态突破点使用方法[转]????????shopping=(Shopping)factory.getBean("StaticAdvisorTest");
浅谈Spring静态突破点使用方法[转]????????shopping.buySomething("something");
浅谈Spring静态突破点使用方法[转]????????shopping.buyAnything("anything");
浅谈Spring静态突破点使用方法[转]????????shopping.sellAnything("anything");
浅谈Spring静态突破点使用方法[转]????????shopping.sellSomething("something");
浅谈Spring静态突破点使用方法[转]????????
浅谈Spring静态突破点使用方法[转]

热点排行