zoukankan      html  css  js  c++  java
  • spring容器BeanFactory简单例子

    在Spring中,那些组成你应用程序的主体及由Spring Ioc容器所管理的对象,都被称之为bean。简单来讲,bean就是Spring容器的初始化、配置及管理的对象。除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

    BeanFactory是Spring Ioc容器的实际代表者,Ioc容器负责容纳此前所描述的bean,并对bean进行管理。

    在Spring中,BeanFacyory是Ioc容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。

    Spring中有两种容器:

      ① BeanFactory 一个最简单的Spring容器,给依赖注入(DI)提供了基础的支持。

      ② ApplicationContext 此容器添加以一些企业需要用到的东西,更加全面。它包含了BeanFactory容器中的东西。

    Spring为我们提供了许多易用的BeanFactory实现,其中DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现。

    DefaultListableBeanFactory的相关类图:

    类图中各个类的作用:

    • AliasRegistry:定义对alias的简单增删改等操作
    • SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现
    • SingletonBeanRegistry:定义对单例的注册及获取
    • BeanFactory:定义获取bean及bean的各种属性
    • DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现
    • HierarchicalBeanFactory:继承BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parentFactory的支持
    • BeanDefinitionRegistry:定义对BeanDefinition的各种增删改操作
    • FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能
    • ConfigurableBeanFactory:提供配置Factory的各种方法
    • ListableBeanFactory:根据各种条件获取bean的配置清单
    • AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurationBeanFactory的功能
    • AutowireCapableBeanFactory:提供创建bean、自动注入、初始化以及应用bean的后处理器
    • AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现
    • ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型及接口等

    直接使用DefaultListableBeanFactory例子:

    新建一个maven工程,引用spring相关包。

    定义一个xml配置bean文件,beanXMLTest.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="testBean" class="com.test.TestBean"/>
    </beans>

    定义一个bean,TestBean.java的实现

    package com.test;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionReader;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    
    public class TestBean {
        public String showMsg;
    
        public String getShowMsg() {
            return showMsg;
        }
    
        public void setShowMsg(String showMsg) {
            this.showMsg = showMsg;
        }
    
        public static void main(String[] args) {
            Resource resource = new ClassPathResource("beanXMLTest.xml");
            BeanFactory fa = new DefaultListableBeanFactory();
            BeanDefinitionReader bdr = new XmlBeanDefinitionReader((BeanDefinitionRegistry) fa);
            bdr.loadBeanDefinitions(resource);
            TestBean bean = (TestBean)fa.getBean("testBean");
            bean.setShowMsg("测试消息");
            System.out.println(bean.getShowMsg());
        }
    }

    运行main方法,得到打印结果

    说明正确的获取到了bean。

     还可以使用其它ClassPathXmlApplicationContext、AnnotationConfigApplicationContext、 AnnotationConfigWebApplicationContext、FileSystemApplicationContext等这些容器。

  • 相关阅读:
    《团队-团队编程项目作业名称-成员简介及分工》
    《团队-团队编程项目作业名称-需求分析》
    《结对-结对编项目作业名称-需求分析》
    团队编程项目总结
    并发工具包
    并发工具包
    spring注解的源码解释
    webservice客户端
    线程池
    问题
  • 原文地址:https://www.cnblogs.com/grasp/p/11032238.html
Copyright © 2011-2022 走看看