Spring IOC(一)

一、容器概述

    ApplicationContext是Spring ioc容器实现的代表,它主要负责实例化、配置和组装Bean。容器通过读取配置元数据获取有关实例化、配置和组装哪些对象的说明。配置元数据可以使用XML、Java注解或Java代码来实现/它允许你处理应用程序的对象与其他对象之间的相互依赖关系。

  // 加载spring容器
//ApplicationContext spring的顶层核心接口
// ClassPathXmlApplicationContext 根据项目路径的xml配置来实例化spring容器
// FileSystemXmlApplicationContext 根据磁盘路径的xml配置来实例化spring容器/
/ AnnotationConfigApplicationContext 根据javaconfig 来配置实例化spring容器
// 在容器实例化的时候 就会加载所有的bean

//  创建Spring的上下文,加载所有的bean
ApplicationContext  ioc=new ClassPathXmlApplicationContext("spring-ioc.xml", "services.xml");

    容器的实例化:对象在Spring容器创建完成的时候就已经创建完成了,不是需要用的时候才创建的。

二、bean的概述

    2.1 获取bean:
        1.2.1  通过类来获取bean   eg.  User user = ioc.getBean(User.class);
        1.2.2  通过bean的名字或id来获取bean。eg. User user = (User)ioc.getBean("User");  【由于getBean里的参数是字符串形式的,Spring并不知道应该将结果转换成什么类型,所以这里需要进行一下强转】
        1.2.3 通过名字+类型获取bean。eg. User user = ioc.getBean("user", User.class);【这种方式与第一种还是有一定区别的如果当该类型不止配了一个bean,如果使用第一种方式的话,就会报错,因为他不知道找到的几个bean里要使用哪一个,这个时候就可以使用name+类型的形式了】
    2.2 bean的别名

// 给bean起别名有两种方式:
// 1、 使用name设置别名,该方式还可以设置多个别名,每个别名之间可以使用空格、分号、逗号中任意作为间隔
   
    用来描述一个Bean是干嘛的
   

//2、一个设置bean别名的标签,alias有别名、化名的意思,name是bean的名字,alias是给这个bean取得别名。

三、依赖

    3.1 依赖注入
        基于setter方法的依赖注入



     
     
     

        基于构造方法的依赖注入
            1、基于name属性设置构造函数的参数
            2、可以只有value值,忽略name属性和其他属性。
                但是,如果省略name属性的话,一定要注意参数顺序,如果顺序与构造方法中的不一致,会造成赋值错误的情况。
                当然也是有解决办法的:
                    2.1 使用name属性
                    2.2 使用index属性,构造方法中的参数从0开始依次排序,在bean里按照这个顺序注入。
                    2.3 使用type属性,该类型只对错乱顺序的参数为类型不一致的情况有效,如果两个参数一致,则该属性解决不了。
            当然,我们最常用的还是name属性了,其他方式了解即可。


     
     
     

    3.2 依赖和配置的细节



     
     
     
     
     
   
    
     
         
             
             
         

     

     
     
         
             唱歌
             跳舞
         

     

     
     
         
             
             
         

     

    3.3 使用 depends-on 属性
        作用:控制加载顺序,当一个bean想让另一个bean在它之前加载的时候,可以设置depends-on,例如:



//这样,book就是在user之前加载的

    3.4 懒加载bean
        作用:让当前的bean不再Spring容器加载的时候就加载,而是在使用的时候才去加载该bean。
            lazy-init="true",加上该属性即可。

4、bean的作用域

bean的作用域

    前两种是bean中比较常用的作用域,后四种需要结合web项目的时候才能使用。

作用域属性:scope
singleton 默认值 同一个id始终只会创建一次bean
prototype 多例(原型) 每一次使用都会创建一个bean

你可能感兴趣的:(Spring IOC(一))