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();
        }
    }
    
  • 相关阅读:
    浅谈PHP7新特性
    TP5与TP3.X对比
    深入源码理解Spark RDD的数据分区原理
    OpenGL的一些基础概念
    关于Spark RDD 的认识
    Ubuntu安装Cloudera Manager以及CDH5.15.2
    小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序
    小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令
    机器学习入门之决策树算法
    机器学习的基本概念
  • 原文地址:https://www.cnblogs.com/dhcao/p/11244118.html
Copyright © 2011-2022 走看看