Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring-Lookup方法中创建抽象对象_Java_Spring - Fatal编程技术网

Java 在Spring-Lookup方法中创建抽象对象

Java 在Spring-Lookup方法中创建抽象对象,java,spring,Java,Spring,在Spring中查找查找方法的信息时,我遇到了这篇文章。有一件事我不明白,但那里没有解释。如果我们上课: public abstract class PizzaShop { public abstract Pizza makePizza(); public abstract Pizza makeVeggiePizza(); } 和弹簧容器: <?xml version="1.0" encoding="UTF-8"?> (...) <bean id="pizzaShop"

在Spring中查找查找方法的信息时,我遇到了这篇文章。有一件事我不明白,但那里没有解释。如果我们上课:

public abstract class PizzaShop {
public abstract Pizza makePizza();
public abstract Pizza makeVeggiePizza();
}
和弹簧容器:

<?xml version="1.0" encoding="UTF-8"?>

(...)

<bean id="pizzaShop" class="com.javarticles.spring.PizzaShop">
    <lookup-method name="makePizza" bean="pizza"/>
    <lookup-method name="makeVeggiePizza" bean="veggiePizza"/>
</bean>

<bean id="pizza" class="com.javarticles.spring.Pizza" scope="prototype"/>

<bean id="veggiePizza" class="com.javarticles.spring.Pizza" scope="prototype">
    <property name="isVeg" value="true"/>
</bean>

我们正在创建一个抽象对象!这是不允许的。为什么可能在这里,或者我在理解整个概念时犯了错误?

这是可能的,因为Spring框架在运行时操纵字节码来创建bean类的子类,该子类使用
查找方法定义至少一个这些属性

这是

查找方法注入

查找方法注入是容器重写的能力 方法,以返回的查找结果 容器中的另一个命名bean。查找通常涉及 原型bean如前一节描述的场景所示。 Spring框架通过使用 从CGLIB库生成字节码以动态生成 重写该方法的子类。

无论方法是否抽象,Spring都依赖于相同的机制:动态生成的子类。
在第一种情况下,它实现了。
在第二种情况下,它将覆盖。

如果方法是抽象的,则动态生成的子类 实现该方法。否则,动态生成的子类 重写在原始类中定义的具体方法


嗯,也许你需要了解像和这样的图书馆
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            "applicationContext.xml");
PizzaShop pizzaShop = (PizzaShop) context.getBean("pizzaShop");