Java 在Spring-Lookup方法中创建抽象对象
在Spring中查找查找方法的信息时,我遇到了这篇文章。有一件事我不明白,但那里没有解释。如果我们上课: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"
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");