* 解耦:降低程序之间的依赖关系,无法策底清除
* 原则:编译期不依赖,运行时才依赖
* 工厂模式解耦
* Bean:在计算机英语中有可重用组件的含义
* JavaBean:用java语言编写的可重用组件  javabean > 实体类
* web工厂一旦部署,相对路径src就用不了了,因为src路径就没有了。
* resource文件下的文件项目部署后,会在类的根路径下
* ApplicationContext的三个常用实现类:
    ClassPathApplicationContext:它可以加载类路径下的配置文件,要求 配置文件必须在类路径下。项目发布之后resource文件夹下面的就是类路径根目录
    FileSystemApplicationContext:它可以加载磁盘任意路径下的配置文件,前提是 必须有访问权限。
    AnnotationConfigApplicationContext:它是用于读取注解创建容器的:
        ***全注解配置spring时,获取容器使用。
            ApplicationContext ac = new AnnotationConfigApplicationContext(自定义取代xml的配置类.class)
* 核心容器两个接口的问题:
    ApplicationContext: 它在构架核心容器的时候,创建对象采取的是立即加载的方式,也就是:只要已读取完配置文件,马上就创建配置文件中的对象。
    BeanFactory:它在构架核心容器时,是采用延迟加载的,也就是,什么时候根据id获取对象,什么时候才是真正的创建对象

    * 实际开发中,要根据实际情况 选择 不同的时间点来创建
        单例对象适合:ApplicationContext  * 常用
        多例对象适合:BeanFactory
* spring中创建bean的三种方式:
    1. 在主配置文件中石油bean标签,配以id和class属性,*** 且没有其他属性和标签时,采用的就是默认构造函数(空参构造)创建对象,如果没有默认构造函数,无法创建,甚至配置文件都会红线提示报错。
       <bean id="a" class="xx.xx.xx.A"></bean>
    2. (引入其他jar包的*方法拿取对象时。源码无法修改以提供默认构造函数)
       a. 先获取jar包中的类 <bean id="a" class="xx.xx.xx.A"></bean>  
       b. 在根据上面的id获取它的方法提供的对象:<bean id="b" factory-bean="a" factory-method="getB"></bean> 
    3. 引入其他jar包中类的静态方法获取对象:
       <bean id="b" class="xx.xx.xx.A" factory-method="getB"></bean> 
* bean标签的作用范围:bean标签的scope属性:指定bean的作用范围
    取值:
        singleton:(默认值)单例的          * 立即创建
        propertype:多利的                * 延迟创建
        request:作用于web应用的请求范围
        session:作用于web应有的额回话返回
        global-session:作用于集群环境的回话范围(全局回话范围),当不是集群回话时,它就是session
* bean标签的两个属性:
    (* 选择性配置)
    init-mrthod:初始化的会执行的方法
    destroy-method: 对象销毁会执行的方法
* bean对象的生命周期:
    单例:当容器创建时出生,只要容器还在对象就或者,容器销毁对象就销毁了。
    多例:当使用对象的时候spring创建,对象只要是在使用过程中就会一直活着,当对象长时间不用也没有被引用时由java的垃圾回收机制回收
* IoC的作用:降低程序间的耦合
    name以后依赖的管理,就交给spring来管理。我们只需要在配置文件说明------依赖注入
* 依赖注入的类型:
    基本类型
    其他bean类型
    复杂类型结合类型
* 注入方式三种:
    构造函数提供: 注入参数时用constructor-arg标签
        属性:  type:要注入的数据类型
            index:指定要输入的数据类型重复时使用,可以独立使用,所有的参数从0开始
            name:参数名称  (常用)
            ----------------------以上用于指定给哪个赋值----------------
            value:要赋予的值,(基本类型和String类型的数据) (spring可以自动转换类型Date类型除外,Date默认是-/-/-的格式,其他的不行)
            ref:用来引入其他bean的id

    set方法提供:在标签中使用properties标签
        <property name="mystrs">            ---name属性对应bean中的属性名称
            <array>                ---集合烈性
                <value>aaa</value>    ---赋予的值
                <value>aaa</value>
                <value>aaa</value>
            </array>
        </property>
        <may>
            <entry key="a" value="b"><entry>
            <entry key="a" value="b"><entry>
        </may>
    注解提供:

    * 注意事项:
        用于注入list结构的有list array set标签
        应用注入map结构的有map props标签
        
        * 结构相同的标签可以互换,list结构一般只用list,map结构的一般只用map
* 主配置文件中的注入的bean的成员变量一定要是不怎么发生改变的,固定的,才会配置到xml文件中

10-05 13:32