美文网首页
1. 依赖查找

1. 依赖查找

作者: hopi | 来源:发表于2021-07-09 10:37 被阅读0次

    简介

    以下内容为学习 Spring 教材后的知识点总结,方便个人复习 Spring 相关知识使用。并不适合入门学习。
    Spring 可通过如下方式查找 Bean

    1. 通过 Bean 名称查找(实时、延迟)
    2. 通过 Bean 类型查找(单个、集合)
    3. 通过注解查找
      注:以上方式又可以分为: 实时查找、延迟查找、查找单个 Bean、查找集合 Bean。

    实例

    // 定义 1 个注解,两个 Java 类
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Super {
    }
    
    public class User {
        private Long id;
        private String name;
        // 省略 getter and setter
    }
    
    @Super
    public class SuperUser extends User {
        private String address;
        // 省略 getter and setter
    }
    
        <!-- 定义 Spring 配置文件 -->
        <bean id="user" class="demo.User" lazy-init="true">
            <property name="id" value="1"/>
            <property name="name" value="karson"/>
        </bean>
        <bean id="objectFactory" class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
            <property name="targetBeanName" value="user"/><!-- value="user" 引用前面定义的 id="user" 的 Bean-->
        </bean>
        <bean id="superUser" class="demo.SuperUser" parent="user" primary="true">
            <property name="address" value="北京"/>
        </bean>
    
            // 通过以上准备,开始演示相关源码
            // 通过 xml 文件创建 BeanFactory。
            BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/META-INF/spring-config.xml");
            // 1. 通过 Bean 名称实时查找单个 Bean。
            // 如设置 lazy-init="true",首次调用 getBean 才初始化 User 对象
            User userByName = (User) beanFactory.getBean("user");  
    
            // 2. 通过 Bean 类型实时查找单个 Bean。
            User userByType = beanFactory.getBean(User.class);
            
            // 3. 通过 ObjectFactory 查找单个 Bean。
            ObjectFactory<User> objectFactory = (ObjectFactory<User>) beanFactory.getBean("objectFactory");
            User user = objectFactory.getObject();
    
            if (beanFactory instanceof ListableBeanFactory) {
                ListableBeanFactory listableBeanFactory = (ListableBeanFactory) beanFactory;
                // 4. 通过 Bean 类型查找 Bean 集合。
                Map<String, User> users = listableBeanFactory.getBeansOfType(User.class);
                // 5. 通过注解查找单个 Bean。
                Map<String, User> users = (Map) listableBeanFactory.getBeansWithAnnotation(Super.class);
            }
    
    

    相关文章

      网友评论

          本文标题:1. 依赖查找

          本文链接:https://www.haomeiwen.com/subject/oxvpyqtx.html