DefaultAdvisorAutoProxyCreator代理应该是动态代理,既然是动态代理:代理类就需要接口,那么为什么下面的例子没有接口的类也能够被代理:
package chapter4.onlyfun.caterpillar.RegexpMatchDemo;public class HelloSpeaker2 { public void helloMaster(String name) {
System.out.println("Hello,"+name+" newbie!");
} public void hello1Newbie(String name) {
System.out.println("Hello,"+name+" master!");
}}package chapter4.onlyfun.caterpillar.RegexpMatchDemo;import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.MethodBeforeAdvice;public class LogBeforeAdvice
implements MethodBeforeAdvice {
private Logger logger =
Logger.getLogger(this.getClass().getName());
public void before(Method method, Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO,
"liuyi method starts..." + method);
}
}package chapter4.onlyfun.caterpillar.RegexpMatchDemo;import org.springframework.context.support.FileSystemXmlApplicationContext;import chapter3.onlyfun.caterpillar.AutoWireDemo.SpringDemo;public class SpringAOPDemo {
public static void main(String[] args) {
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
new SpringAOPDemo().getAbsolutePath() + "/beans-config_DefalutAdvisorAutoProxyCreator.xml");
HelloSpeaker2 helloProxy=(HelloSpeaker2)context.getBean("helloSpeaker2");
helloProxy.hello1Newbie("Justin");
helloProxy.helloMaster("caterpillar");
}
private String getAbsolutePath() {
return this.getClass().getResource("").getPath().toString();
}
}<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="logBeforeAdvice" class="chapter4.onlyfun.caterpillar.RegexpMatchDemo.LogBeforeAdvice"></bean>
<bean id="regExpAdvice" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="pattern">
<value>.*Newbie</value>
</property>
<property name="advice" ref="logBeforeAdvice"></property>
</bean>
<bean id="helloSpeaker2" class="chapter4.onlyfun.caterpillar.RegexpMatchDemo.HelloSpeaker2"></bean>
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
</beans>
package chapter4.onlyfun.caterpillar.RegexpMatchDemo;public class HelloSpeaker2 { public void helloMaster(String name) {
System.out.println("Hello,"+name+" newbie!");
} public void hello1Newbie(String name) {
System.out.println("Hello,"+name+" master!");
}}package chapter4.onlyfun.caterpillar.RegexpMatchDemo;import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.aop.MethodBeforeAdvice;public class LogBeforeAdvice
implements MethodBeforeAdvice {
private Logger logger =
Logger.getLogger(this.getClass().getName());
public void before(Method method, Object[] args,
Object target) throws Throwable {
logger.log(Level.INFO,
"liuyi method starts..." + method);
}
}package chapter4.onlyfun.caterpillar.RegexpMatchDemo;import org.springframework.context.support.FileSystemXmlApplicationContext;import chapter3.onlyfun.caterpillar.AutoWireDemo.SpringDemo;public class SpringAOPDemo {
public static void main(String[] args) {
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
new SpringAOPDemo().getAbsolutePath() + "/beans-config_DefalutAdvisorAutoProxyCreator.xml");
HelloSpeaker2 helloProxy=(HelloSpeaker2)context.getBean("helloSpeaker2");
helloProxy.hello1Newbie("Justin");
helloProxy.helloMaster("caterpillar");
}
private String getAbsolutePath() {
return this.getClass().getResource("").getPath().toString();
}
}<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="logBeforeAdvice" class="chapter4.onlyfun.caterpillar.RegexpMatchDemo.LogBeforeAdvice"></bean>
<bean id="regExpAdvice" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="pattern">
<value>.*Newbie</value>
</property>
<property name="advice" ref="logBeforeAdvice"></property>
</bean>
<bean id="helloSpeaker2" class="chapter4.onlyfun.caterpillar.RegexpMatchDemo.HelloSpeaker2"></bean>
<bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
</beans>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货