lookup-method
lookup-method为抽象方法指定返回类型,会为标记了lookup-method的方法生产代理类来处理返回类,所以就算是个抽象类,依然可以使用,毕竟真正调用的是代理类。
定义bean
public class User {
public void showMe(){
System.out.println("i am user");
}
}
// 子类1
public class Teacher extends User {
@Override
public void showMe() {
System.out.println("i am teacher");
}
}
// 子类2
public class Student extends User {
@Override
public void showMe() {
System.out.println("i am student");
}
}
// 使用环境
public abstract class TestLookup {
public abstract User getBean();
public void show(){
this.getBean().showMe();
}
}
配置xml
// xml配置
<bean id="testLookup" class="org.dhcao.relax.spring.lookup.TestLookup">
<lookup-method name="getBean" bean="student"></lookup-method>
</bean>
<bean id="teacher" class="org.dhcao.relax.spring.lookup.Teacher"></bean>
<bean id="student" class="org.dhcao.relax.spring.lookup.Student"></bean>
使用结果
// 效果
public class Main {
public static ApplicationContext context = null;
public static void main(String[] args) {
context = new ClassPathXmlApplicationContext("spring-context.xml");
lookup();
}
public static void lookup(){
TestLookup bean =(TestLookup) context.getBean("testLookup");
bean.show();
}
}
七月 25, 2019 12:00:47 下午
i am student
@Lookup
是lookup-method的注解版本,在方法或者抽象方法上使用@Lookup注解,将会根据该方法的返回值,自动在BeanFactory中调用getBean()来注入该Bean。
public abstract class TestLookup {
@Lookup
public abstract Teacher getBean();
public void show(){
this.getBean().showMe();
}
}