zoukankan      html  css  js  c++  java
  • Spring的IOC容器类别概述

    Spring的IOC该如何理解呢?

    平常在一个方法当中,若要用到外部另一个类里的非静态方法,首先,需要先通过new一个对象,再根据这个对象去调用其方法。若只需要一两个对象还好,一旦涉及的外部对象多了,就要创建一大堆new,管理起来就很麻烦。这时候,IOC的思想就起到关键作用了,它可以实现把创对象创建与操作统一交给框架管理。那么,新创建的对象都是怎么存在spring框架当中的呢?其实,这里面就用到了Map缓存。你可以简单这样理解,spring就像一个map容器,bean都存放在这个map里,若要用到map里存放的对象,就可以通过一个key去map里获取,这个key,可以是id或者bean的默认名。

    以后,若要用到这个对象,例如spring最简单的如注解方式——

    @Resource
    private DemoService demoService;
    

    如此定义之后,Spring框架就会帮我们自动创建一个DemoService单例对象,然后将demoService引用指向对象的地址,接下来,就可以直接通过引用demoService变量调用DemoService里的方法了。至于Spring如何通过注解方式来实现调用Bean对象的,后面会专门写一篇文章介绍。

    Spring给我们提供两种类型的IoC容器实现,通过这两种IOC容易,可以生成bean,并获取bean:

    1. 实现了BeanFactory接口的基本IoC容器。
    2. 实现了ApplicationContext接口的高级IoC容器。

    实现BeanFactory接口的基本IoC容器一般如下:

    @Test
    public void createWithNullTarget() {
       Resource resource = new ClassPathResource("myBean.xml");
        // 构造工厂
       DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
        // 新增Xml阅读器
       XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
        // 规则注册入容器
       reader.loadBeanDefinitions(resource);
       Pet person = factory.getBean(Pet.class);
       System.out.println(person.toString());
    }
    
    

    实现了ApplicationContext接口的高级IoC容器一般如下:

    XXXServiceImpl XXXService = SpringContextUtils.getBean(XXXServiceImpl.class);
    

    再封装SpringContextUtils工具——

    @Component
    public class SpringContextUtils implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        public static <T> T getBean(Class<T> clazz) {
            return getApplicationContext().getBean(clazz);
        }
    }
    

    实际应用当中,多是使用ApplicationContext接口的高级IoC容器来获取Spring管理的bean。

    作者:朱季谦
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    hdu 2444(二分图) The Accomodation of Students
    hdu 5532 (LIS) Almost Sorted Array
    hdu 1059 (多重背包) Dividing
    poj 2184(Cow Exhibition)
    hdu 2571 (命运) 那个配图女神
    poj 3624 && hdu 2955(背包入门)
    hdu 1257 && hdu 1789(简单DP或贪心)
    BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现
    Django之form模板的使用
    Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
  • 原文地址:https://www.cnblogs.com/zhujiqian/p/14971936.html
Copyright © 2011-2022 走看看