我正在尝试使用两个bean类实现一个通用接口?

时间:2016-05-09 09:08:14

标签: java spring spring-mvc spring-aop

最近我正在练习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();
}

0 个答案:

没有答案