最近我正在练习Spring AOP。为了解决上述问题,我试图使用AOP"简介 - 使用Aspect"添加功能;我的代码中的概念我正在使用两个bean类,它被称为" Blender&范"这两个bean实现了一个通用的接口,名称是" IMachine.java"此接口由另一个类实现,其名称为" MachineWear.java"但是当我运行我的App.java类时,我得到的是Exception.How我可以解决它吗?
2016年5月9日下午2:11:27 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息:刷新org.springframework.context.support.ClassPathXmlApplicationContext@c4437c4:启动日期[Mon May 09 14:11:27 BDT 2016];上下文层次结构的根 2016年5月9日下午2:11:28 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息:从类路径资源[com / mir00r / spring / aop / beans.xml]加载XML bean定义
2016年5月9日下午2:11:29 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息:在org.springframework.beans.factory.support.DefaultListableBeanFactory@66a3ffec中预先实例化单例:定义bean [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context。 annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,搅拌机,照相机,汽车,风扇,记录器,machineAspects,透镜,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor] ;工厂层级的根
线程中的异常" main" java.lang.ClassCastException:com.sun.proxy。$ Proxy9无法强制转换为com.mir00r.spring.aop.IMachine 在com.mir00r.spring.aop.App.main(App.java:44)
Hare是我的源代码
/SpringAOP/src/com/mir00r/spring/aop/App.java
package com.mir00r.spring.aop;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/mir00r/spring/aop/beans.xml");
IBlender blender = (IBlender)context.getBean("blender");
( (IMachine) blender).Start();
blender.Blend();
IFan fan = (IFan) context.getBean("fan");
( (IMachine) fan).Start();
fan.Active(3);
context.close();
}
}
/SpringAOP/src/com/mir00r/spring/aop/MachineAspects.java
package com.mir00r.spring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class MachineAspects {
@DeclareParents( value = "com.mir00r,spring.aop.*", defaultImpl = com.mir00r.spring.aop.MachineWear.class )
private IMachine machine;
@Around("within(com.mir00r.spring.aop.*)")
public void RunMachine( ProceedingJoinPoint jp ){
System.out.println("Running........");
try {
jp.proceed();
}
catch (Throwable e) {
e.printStackTrace();
}
System.out.println(".....Completed");
}
}
/SpringAOP/src/com/mir00r/spring/aop/beans.xml
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.mir00r.spring.aop"></context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="false"></aop:aspectj-autoproxy>
</beans>
/SpringAOP/src/com/mir00r/spring/aop/Blender.java
package com.mir00r.spring.aop;
import org.springframework.stereotype.Component;
@Component
public class Blender implements IBlender {
/* (non-Javadoc)
* @see com.mir00r.spring.aop.IBlender#Blend()
*/
@Override
public void Blend (){
System.out.println("Blending........");
}
}
/SpringAOP/src/com/mir00r/spring/aop/IBlender.java
package com.mir00r.spring.aop;
public interface IBlender {
public abstract void Blend();
}
/SpringAOP/src/com/mir00r/spring/aop/Fan.java
package com.mir00r.spring.aop;
import org.springframework.stereotype.Component;
@Component
public class Fan implements IFan {
/* (non-Javadoc)
* @see com.mir00r.spring.aop.IFan#Active(int)
*/
@Override
public void Active ( int level ){
System.out.println("Fan Running level is: " + level);
}
}
/SpringAOP/src/com/mir00r/spring/aop/IFan.java
package com.mir00r.spring.aop;
public interface IFan {
public abstract void Active(int level);
}
/SpringAOP/src/com/mir00r/spring/aop/MachineWear.java
package com.mir00r.spring.aop;
public class MachineWear implements IMachine {
/* (non-Javadoc)
* @see com.mir00r.spring.aop.IMachine#Star()
*/
@Override
public void Start (){
System.out.println("Machine is Starting........");
}
}
/SpringAOP/src/com/mir00r/spring/aop/IMachine.java
package com.mir00r.spring.aop;
public interface IMachine {
public void Start();
}