package com.springinaction.springidol;
public interface MindReader {
void interceptThoughts(String thoughts);
String getThoughts();
}
package com.springinaction.springidol;
public class Magician implements MindReader {
private String thoughts;
public void interceptThoughts(String thoughts) {
System.out.println("Intercepting volunteer's thoughts---" + thoughts);
this.thoughts = thoughts;
}
public String getThoughts() {
return thoughts;
}
}
package com.springinaction.springidol;
public interface Thinker {
void thinkOfSomething(String thoughts);
}
package com.springinaction.springidol;
public class Volunteer implements Thinker {
private String thoughts;
public void thinkOfSomething(String thoughts) {
this.thoughts = thoughts;
}
public String getThoughts() {
return thoughts;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="volunteer" class="com.springinaction.springidol.Volunteer" />
<bean id="magician" class="com.springinaction.springidol.Magician"/>
<aop:config>
<aop:aspect ref="magician">
<aop:pointcut id="thinking" expression="execution(* com.springinaction.springidol.Thinker.thinkOfSomething(String)) and args(thoughts)" />
<aop:before pointcut-ref="thinking" method="interceptThoughts" arg-names="thoughts"/>
</aop:aspect>
</aop:config>
</beans>
package com.springinaction.springidol;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args){
ApplicationContext appContext = new ClassPathXmlApplicationContext("t.xml");
Thinker v= (Thinker)appContext.getBean("volunteer");
v.thinkOfSomething("ustc");
}
}