Spring的IOC

一、Spring的概述

       1.Spring是什么?

          Spring是分层的 Java SE/EE应用全栈轻量级开源框架;

       2.Spring的两大核心

            1) IOC(Inverse Of Control: 反转控制

             2)  AOP(Aspect Oriented Programming:面向切面编程

       3.Spring优势

           1)方便解耦,简化开发 

                   通过 Spring提供的 IoC容器,可以将对象间的依赖关系交由 Spring进行控制;

            2) AOP编程的支持 

                   通过 Spring的 AOP 功能,方便进行面向切面的编程

            3)声明式事务的支持 

            4)方便程序的测试 

        4.Spring的体系结构(官方)

             

           5.程序耦合

      耦合: 程序之间的依赖       
包括:
类之间的依赖
方法之间的依赖
解耦
降低程序间的依赖关系
实际开中应该做到:编译期不依赖,运行时才依赖
      解耦思路
第一步:使用反射来创建对象,避免使用new关键字
第二步:通过读取配置文件来获取要创建的对象的全限定类名

 二、SpringIOC

        1.概念:

            控制反转(IOC):把创建对象的权力交给框架,是框架的重要特性,并非面向对象编程的专业术语,包括:依赖注入(DI)依赖查找;

         2.IOC作用:削减计算机程序之间的耦合(解除我们代码中的依赖关系)

         3.环境搭建

           1)导入spring的依赖

            2)创建配置文件:

                        导入约束:

<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">

                        把对象的创建交给spring管理:

<!--把对象的创建交给spring管理-->
    <bean id="accountService" class="com.li.Service.impl.AccountServiceImpl"/>

            3)获取springIOC的核心容器,根据id获取对象:                 

 public static void main(String[] args) {
      ApplicationContext ac =new ClassPathXmlApplicationContext("Bean.xml");
        IAccountService accountService = ac.getBean("accountService", IAccountService.class);
    }

                   ApplicationContext三个常用的类:

                                    ClassPathXmlApplicationContext:他可以加载类路径下的配置文件,要求配置文件必须在类路劲下,不在则不能加载

                                    FileSystemXmlApplicationContext:它可以加载磁盘任意路劲的配置文件(必须有访问权限)

                                    AnnotationConfigApplicationContext:读取注解创建容器               

                  核心容器的两个接口引发的问题:

                          ApplicationContext: 单例对象适用(实际开发中用)

                                           它在构建核心容器时,创建对象采取的策略是采用立即加载方式,使用读取完配置文件就马上创建配置文件中的配置对象

                          BeanFactory:多例对象

                                          它在构建核心容器时,创建对象采取的策略是采用延迟加载方式,什么时候根据id获取对象了,什么时候才真正的创建对象

         4.Spring 创建Bean的三种方式

             1)使用默认的构造函数创建

                    在spring的配置文件中使用Bean标签,配以id和class属性即可;

                    注意: 如果该类中无默认的构造函数则创建失败;              

<!--使用默认的构造函数创建-->
<bean id="accountService" class="com.li.service.impl.AccountServiceImpl"></bean>

              2)  使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)

             

/**
 * 模拟一个工厂类
 */
public class InstanceFactory {
    public IAccountService getAccountService(){
        return new AccountServiceImpl();
    }
}
<!--xml文件的配置-->
<
Bean id="intanceFactory" class="com.li.factory.InstanceFactory"/> <bean id="accountService" factory-bean="intanceFactory" factory-method="getAccountService"/>


 

            3)使用工厂中静态方法创建对象(使用某个类中的静态方法创建随想,并存入spring)

/**
 *模拟一个工厂类
 */
public class StaticFactory {
    public static IAccountService getAccountService(){
        return new AccountServiceImpl();
    }
}
<Bean id="accountService" factory-bean="com.li.factory.Staticfactory" factory-method="getAccountService"/>

        5.Spring中Bean的作用范围

              1.spring中bean标签的调整:

                    * 使用bean标签中的scope属性:

                           取值:

                                   1)singleton:单例(默认值)

                                   2)prototype:多例

                                   3)request:作用于web的请求范围

                                   4)session:作用于web的会话范围             

                                   5)globla-session:作用于集群的会话范围(全局会话范围),当不是集群环境时,它就是session

          6.Bean对象的生命周期

                 1)单例对象:

                                     出生:容器创建时(解析配置文件)对象产生

                                     活着:只要容器在,对象就在

                                     死亡:容器不在,对象就不在

                                     单例对象的生命周期和容器相同

                  2)多例对象:

                                   出生:当使用对象时spring框架为我们创建

                                   活着:对象在使用过程中就一着在

                                    死亡:当对象长时间不用,且没有其他对象引用,java垃圾回收机器进行回收

原文地址:https://www.cnblogs.com/cqyp/p/12497509.html