最新学习AOP面向切面编程,下面简单写一个例子。解决问题$Proxy0 cannot be cast to com.ufgov.springb.ioc.Acrobat,类型转换问题。
切面类:
package com.ufgov.springd.aop;
public class Audience {
public void before(){
System.out.println("before method");
}
}
业务接口类
package com.ufgov.springb.ioc;
public interface Perform {
public void perform();
}
业务实现类
package com.ufgov.springb.ioc;
public class Acrobat implements Perform{
@Override
public void perform() {
System.out.println("Acrobat perform");
}
}
Spring配置
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="acrobat" class="com.ufgov.springb.ioc.Acrobat"></bean>
<bean id="audience" class="com.ufgov.springd.aop.Audience"></bean>
<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="perform" expression="execution(* com.ufgov.springb.ioc.*.*(..))"/>
<aop:before method="before" pointcut-ref="perform"/>
</aop:aspect>
</aop:config>
</beans>
测试类
package com.ufgov.springd.aop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ufgov.springb.ioc.Perform;
public class TestAop {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("daop.xml");
//Acrobat acrobat = (Acrobat) context.getBean("acrobat");必须转为接口类型
Perform acrobat = (Perform) context.getBean("acrobat");
acrobat.perform();
}
}
以上就是一个AOP小例子,最开始这样写总是报类型转换错误,之后强制转型为接口就可以了。