Spring API上说Introduction 就是<aop:declare-parents ..>这个
相当于是给被切入的类实现了一个指定的接口
这么说下面这样一个代码
interface A {} //切面接口
class B implements A {} //切面
class C {} //被切面
<bean id="c" class="C"/>
<aop:declare-parents
types-matching="C+"
implement-interface="A"
default-impl="B"/>配置完成之后通过BeanFactory.getBean("c")
得到的应该可以是一个实现了A接口的C
那么这个东西既可以被强转成C也可以被强转成A(getBean得到的是Object)
但是我C c = (C)factory.getBean("c")报错 说无法强转
A a = (A)factory.getBean("c")就没问题
用factory.getBean("c").getClass().getDeclaredMethods()打印出来 发现只有一个方法(实际我在类B和类C中都有定义一个测试方法)
也就是说实际相当于一顿操作之后 我的bean c被弄成了A类型的?
实际代码贴在楼下了 想很久了没懂 帮忙看看 感激万分
相当于是给被切入的类实现了一个指定的接口
这么说下面这样一个代码
interface A {} //切面接口
class B implements A {} //切面
class C {} //被切面
<bean id="c" class="C"/>
<aop:declare-parents
types-matching="C+"
implement-interface="A"
default-impl="B"/>配置完成之后通过BeanFactory.getBean("c")
得到的应该可以是一个实现了A接口的C
那么这个东西既可以被强转成C也可以被强转成A(getBean得到的是Object)
但是我C c = (C)factory.getBean("c")报错 说无法强转
A a = (A)factory.getBean("c")就没问题
用factory.getBean("c").getClass().getDeclaredMethods()打印出来 发现只有一个方法(实际我在类B和类C中都有定义一个测试方法)
也就是说实际相当于一顿操作之后 我的bean c被弄成了A类型的?
实际代码贴在楼下了 想很久了没懂 帮忙看看 感激万分
public void sayHello();
}Singer.javapackage com.jordan.spring;public class Singer implements Contestant { @Override
public void sayHello() {
System.out.println("-------------------Singer.sayHello()--------------------------");
}}Performer.javapackage com.jordan.spring;public class Performer {
public void perform() {
System.out.println("-------------------Performer.perform()-----------------------");
}
}
ApplicationContext.xml <bean name="performer" class="com.jordan.spring.Performer"/>
<aop:config>
<aop:aspect>
<aop:declare-parents
types-matching="com.jordan.spring.Performer+"
implement-interface="com.jordan.spring.Contestant"
default-impl="com.jordan.spring.Singer"/>
</aop:aspect>
</aop:config>
Client.javapackage com.jordan.spring;import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Client {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
// Performer performer = (Performer)factory.getBean("performer"); //报错
// Contestant contestant = (Contestant)factory.getBean("performer");//不报错
// contestant.sayHello();
Object temp = factory.getBean("performer");
System.out.println(temp.getClass().getDeclaredMethods());
}
}