• Spring IOC(一)


    最近复习,准备整理下复习笔记

    Spring IOC 部分:

    控制反转(Inversion of Control)

    IOC是什么

    简言之 IOC完成的事情原先由程序员主动通过new实例化对象事情,转交给spring负责。

    1) 控制反转中控制指的是:控制类的对象

    2) 控制反转中反转指的是转交给spring负责

    3) IOC最大的作用:解耦

    3.1) 程序员不需要管理对象,解除了对象管理和程序员之间的耦合。

    何为ApplicationContext?

    Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文

    Application Context 是 spring 中较高级的容器。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。

    另外,它增加了企业所需要的功能,比如,从属性文件中解析文本信息和将事件传递给所指定的监听器。这个容器在 org.springframework.context.ApplicationContext interface 接口中定义。

    ApplicationContext 包含 BeanFactory 所有的功能,一般情况下,相对于 BeanFactory,ApplicationContext 会更加优秀。当然,BeanFactory 仍可以在轻量级应用中使用,比如移动设备或者基于 applet 的应用程序。

    最常被使用的 ApplicationContext 接口实现:

     

    • FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径

       

    • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从

      CLASSPATH 中搜索 bean 配置文件

       

    • WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。

       

    环境搭建方面:

    1 导入jar

    1.1 四个核心包一个日志包(commons-logging)

    2 在src下新建applicationContext.xml

    2.1 文件名称和路径自定义

    2.2 记住Spring容器ApplicationContext,applicationContext.xml配置的信息最终存储到了ApplicationContext容器中

    2.3 Spring配置文件时基于schema

    2.3.1 shema文件扩展名是.xsd

    2.3.2 把shema理解为DTD(xml的语法检查器)的升级版

    2.3.3 每次引入一个xsd文件是一个namespace(xmlns)

    2.4 配置文件中只需要引入最基本的schema

    2.4.1 通过<bean/>创建对象

    2.4.2 默认配置文件被加载时创建对象

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <!--applicationContext.xml的配置信息最终都存储到了ApplicationContext容器中-->

    3 编写测试方法

    4 使用类加载applicationContext.xml

    package com.qyx;
    
    import com.qyx.Bean.People;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
        public static void main(String args[])
        {
            ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext.xml");
            //getBean方法(参数1:<bean>标签的id值,返回值类型);
            //getBean方法的第二个参数可以不写,不写则是Object类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
            People people=applicationContext.getBean("people",People.class);
            System.out.println(people);
            //取出spring 容器中所管理的所有的对象的id
            //其方法返回的是一个String数组
            String[] beansName=applicationContext.getBeanDefinitionNames();
            for(String string:beansName)
            {
                System.out.println(string);
            }
        }

    Spring 创建对象的三种方式

    1.通过构造方法创建

    1.1 无参构造创建:默认情况

    无需配置,spring容器默认使用无参构造器来创建对象

    1.2 有参构造创建:需要明确配置

    1.2.1 需要在类中提供有参构造方法

    1.2.2 在applicationContext.xml中设置调用哪个方法创建对象

    注意:如果设定的条件匹配多个构造方法执行最后的构造方法

     

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       <!--applicationContext.xml的配置信息最终都存储到了ApplicationContext容器中-->
        <!--id表示获取对象标识
            class 创建哪个类的对象
        -->
        <bean id="people" class="com.qyx.Bean.People">
            <!--使用构造器进行创建-->
            <!--index是构造器参数的索引下标-->
            <!--name是构造器参数的名字-->
            <!--type是参数的类型-->
            <!--ref引用另一个bean给构造器参数赋值-->
            <!--value赋给构造器参数的值-->
            <!--前面三个参数可以只选其一,也可以全写,通过它们可以在多个构造器的情况下决定使用哪个构造器-->
            <!--在用value赋值是,如果原类型是int,则不可写成java.lang.Integer,只能写为int-->
            <constructor-arg index="0" name="id" type="int" value="001"></constructor-arg>
            <constructor-arg index="1" name="name" type="java.lang.String" value="QYX"></constructor-arg>
            <constructor-arg index="2" name="job" type="java.lang.String" value="架构师"></constructor-arg>
            <constructor-arg index="3" name="major" type="java.lang.String" value="计算机科学与技术"></constructor-arg>
    
        </bean>
        <!--如果不加constructor-arg参数,则默认使用无参构造器-->
        <bean id="people1" class="com.qyx.Bean.People">
        </bean>
    </beans>

    2.实例工厂

    2.1 工厂设计模式:帮助创建类对象,一个工厂可以创建多个对象

    2.2 实例工厂:需要先创建工厂,才能生产对象

    2.3 实现步骤

    2.3.1 必须要有一个实例工厂

    package com.qyx.Bean;
    
    public class PeopleFactory {43
        {
            return new People(002,"aaaa","bbbb","cccc");
        }
    }

    2.3.2 在applicationContext.xml中配置工厂对象和需要创建的对象

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        </bean>
        <!--以下为实例工厂模式创建对象-->
        <!--如果不加constructor-arg参数,则默认使用无参构造器-->
        <!--通过设置scope来进行单例模式设置-->
        <!--工厂模式里的工厂一般都是单例-->
        <bean id="factory" class="com.qyx.Bean.PeopleFactory" scope="singleton"></bean>
        <!--配置bean同时指定生产它的工厂,同时指定生产它的方法-->
        <bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>
    </beans>

    3.静态工厂

    3.1 不需要创建工厂,快速创建对象

    3.2 实现步骤

    3.2.1 编写一个静态工厂(在方法上添加static)

    package com.qyx.Bean;
    
    public class PeopleFactory {
    
        public static People newInstance02()
        {
            return new People(003,"dddd","eeee","ffff");
        }
    }

    在applicationContext.xml中指定相关属性

    <!--静态工厂-->
    <bean id="peo2" class="com.qyx.Bean.PeopleFactory" factory-method="newInstance02"/>
  • 相关阅读:
    1037. 在霍格沃茨找零钱(20)
    1036. 跟奥巴马一起编程(15)
    Java基础(五)面对对象
    Java基础(四)方法和数组
    Java基础(三)选择和循环结构
    Java基础(一)
    工厂模式(Factory Pattern)
    git 基本操作
    CXF生成客户端遇到的问题
    简单的CRUD(二)
  • 原文地址:https://www.cnblogs.com/qyx66/p/11960015.html
Copyright © 2020-2023  润新知