Spring的IOC容器通过依赖注入DI(dependency injection)来实现程序之间的依赖关系,达到解耦的方式

依赖的方式:
a.基于xml文件配置的注入
    * 构造函数注入
    * setter方法注入
    * 特定接口的注入(用的很少,省略)
    
a1:常见pojo类属性的注入

a2:bean的scope属性代表bean对象的作用域 scope = "singleton/prototype"
    singleton : 单例,仅初始化一次,创建一个实例 A a = new A();
    prototype : 每一次对bean的访问都重新创建一个实例 A a = new A(); A b = new A();
    
a3:bean的延迟加载
    * 在bean标签里面写入lazy-init = "false" / lazy-init = "true"
    * 也可以在beans的头文件里面写入 default-lazy-init="true" 代表整个配置文件的对象都是延迟加载

a4:spring可以自动的向bean中注入依赖 -- 自动装配(autowire)    
    自动装配的两种方式:
    * byName 定义的依赖的bean名称需要与类中引用的名称一致,就会匹配依赖关系
    * byType 通过定义的依赖bean的类型来匹配(默认autowire-candidate="true",有多个实现类的时候要设置其余的为false)
    详见代码 autowire.*
    总结:建议不要在配置文件里面用自动装配,虽然可以减少配置文件,但是不利于维护

配置文件的读取:
    
        //第一种方式 ,单个配置文件的加载
        /*ApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        UserSetterService userSetterService =
                    (UserSetterService) ac.getBean("userSetterService");
        System.out.println(userSetterService);*/
        
        //第二种方式 多个文件文件的加载
        /*ApplicationContext ac =
                new ClassPathXmlApplicationContext("applicationContext.xml",
                            "applicationContext-property.xml",
                            "applicationContext-autowire.xml");*/
        /*String[] configFiles = new  String[]{"applicationContext.xml",
                "applicationContext-property.xml",
                "applicationContext-autowire.xml"};
        ApplicationContext ac =
                new ClassPathXmlApplicationContext(configFiles);*/
        
        //第三种方式: 用约定的方式
        /*ApplicationContext ac =
                         new ClassPathXmlApplicationContext("applicationContext*.xml");
        */
        
        
        //第四种方式:读取一个总的配置文件 ,其他配置都被包含在这一个总得配置文件里面
        /*ApplicationContext ac =
                new ClassPathXmlApplicationContext("application-all.xml");
    */
    
        //第五种方式:BeanFactory
        ApplicationContext ac =
                new FileSystemXmlApplicationContext("D:\\Eclipse_WorkSpace\\spring02-IOC-DI\\src\\applicationContext.xml");
        
        
        UserSetterService userSetterService =
                (UserSetterService) ac.getBean("userSetterService");
        System.out.println(userSetterService);

SpringIOC学习二的更多相关文章

  1. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  2. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  3. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  5. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  6. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  7. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  8. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  9. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

随机推荐

  1. CSS选取第n个标签元素

    最近做一个项目,碰到这样的需求,需要选取某个元素的倒数第几个标签元素,想让他显示不同的样式 1.first-child first-child表示选择列表中的第一个标签.例如:li:first-chi ...

  2. java之内存分布图

    前言 不关我们是创建基本数据类型的变量还是引用数据类型的变量,jvm都会通过内存分布去编译和运行程序. 内存一般分为栈区.堆区.方法区(方法区里面包含常量池) 栈区一般存放变量(局部变量).方法的参数 ...

  3. Java终结方法的使用(终结守卫者)

    终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 ...

  4. Duplicate column name 'vocabulary'

    创建一个视图: 报错:Duplicate column name 'vocabulary' 意思是视图select的列名重复了,取别名 改成这样就ok了

  5. 第2次作业:软件分析之Steam

    1. 作业内容 1.1 介绍产品相关信息 你选择的产品是? 我选择的分析的软件为STEAM 为什么选择该产品作为分析? 在上述列表中的产品,除了王者荣耀,其他几项都是平时我使用较为频繁的软件,所以最初 ...

  6. beta冲刺用户测评-咸鱼

    测评人:庄加鑫-咸鱼 测评结果  一.使用体验数据加载响应很快!页面切换丝滑流畅!UI有点偏暗,有些字被覆盖了.页面布局过于居中,两侧空白范围较大.总体功能完善.二.登录.注册.忘记密码界面管理员登录 ...

  7. 20162330 第三周 蓝墨云班课 泛型类-Bag 练习

    目录 题目及要求 思路分析 遇到的问题和解决过程 代码实现及托管链接 感想 参考资料 题目及要求 代码运行在命令行中,路径要体现学号信息,IDEA中,伪代码要体现个人学号信息: 参见Bag的UML图, ...

  8. js日常积累

    1.数组转字符串 str.join(',') 2.字符串转数组 arr.split(',') 3.数组排序 function sorb(a,b){return a-b;}; arr.sort(sorb ...

  9. vue下拉列表

    最近在弄作品,做了个下拉列表.心想各位小哥哥.小姐姐可能会用到相同的需求,就把下拉列表封装一下,希望能对各位小哥哥,小姐姐有帮助 github地址:https://github.com/ClmPisc ...

  10. python 关键字的操作

    声明:本文章默认使用的是python 3.6.1 1.要想当个牛逼的程序员,就要精通各种hello world的写法,当然,我不牛逼,只能用python去写^..^! print("Hell ...