zoukankan      html  css  js  c++  java
  • lookup-method 和 @Lookup

    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();
        }
    }
    
  • 相关阅读:
    js利用原型对象实现继承--Es5实现的面向对象方式
    js的构造函数原型链
    回调函数
    箭头函数
    关于js的易错知识
    信息论--(1)
    计算机为什么需要反码,补码?
    windows+anaconda下载安装libelimg,学习图像处理
    spring boot + thymeleaf 3 国际化
    spring boot hello and docker
  • 原文地址:https://www.cnblogs.com/dhcao/p/11244118.html
Copyright © 2011-2022 走看看