Spring IOC

Spring IOC

ApplicationContext

  • ClassPathXmlApplicationContext:可以访问在类路径下的配置文件
  • FileSystemXmlApplicationContext:可以访问在磁盘任意路径下的配置文件
  • AnnotationConfigApplicationContext:用于读取注解创建容器

核心容器接口

  • ApplicationContext:在构建核心容器时,创建对象采取的策略是采用立即架在的方式(单例对象适用)
  • BeanFactory:在构建核心容器时,创建对象的策略是采用延迟架在的方式(多例对象适用)

spring对bean的管理细节

一、创建bean的三种方式

  • 使用默认构造函数创建

    • 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。采用的方式就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

    • <bean id="myService" class="com.lxc.service.impl.MyServiceImpl"></bean>
      
  • 使用普通工厂中的方法创建对象

    • 使用某个类的方法创建对象,并存入spring容器

    • <bean id="inFactory" class="com.lxc.factory.InstanceFactory"></bean>
          <bean id="myService1" factory-bean="inFactory" factory-method="getMyService"></bean>
      
  • 使用工厂中的静态方法创建对象

    • 使用某个类中的静态方法创建对象,并存入spring容器

    • <bean id="myService2" class="com.lxc.factory.StaticFactory" factory-method="getMyService"></bean>
      

二、bean的作用范围

  • bean标签的scope属性
    • 作用:用于指定bean的作用范围
    • 取值
      • singleton:单例,默认值
      • prototype:多例
      • request:作用于web应用的请求范围
      • session:作用于web应用的会话范围
      • global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,则为session

三、bean的生命周期

  • 单例对象

    • 创建:当容器创建时对象创建
    • 生存:容器存在,对象就一致存在
    • 死亡:容器销毁,对象死亡
  • 多例对象

    • 创建:当使用对象时创建
    • 生存:在使用过程中
    • 死亡:当对象长时间不用,且没有别的对象引用时,由java的垃圾回收机制自动回收
  • bean生命周期方法

    • init-method属性:创建bean时执行

    • destroy-method属性:销毁bean前执行

    • <bean id="myService" class="com.lxc.service.impl.MyServiceImpl"
                init-method="init" destroy-method="destroy"></bean>
      

Spring中的依赖注入

  • 依赖注入:Dependency Injection

  • 将依赖关系交给spring来维护

  • 可以注入的数据:

    • 基本类型和string
    • 其他bean类型
    • 复杂类型和集合类型
  • 注入的方式

    • 使用构造函数提供

      • 使用标签:constructor-arg
      • 标签出现的位置:bean标签的内部
      • 属性
        • type:用户指定要注入的数据的数据类型
        • index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,参数从0开始
        • name:用于指定给构造函数中指定名称的参数赋值
        • value:用于提供基本类型和string类型的数据
        • ref:用于指定其他的bean类型数据,指的就是在spring的ioc核心容器中出现过的bean对象
      • 优势:
        • 在获取bean对象时,注入的数据是必须的操作,否则对象无法创建成功
      • 劣势
        • 改变了bean对象的实例化方式,即便在创建对象是用不到这些数据,也必须提供
    • 使用set方法提供

      • 使用标签:property
      • 属性
        • name:用于指定注入时所调用的set方法名称
        • value:用于提供基本类型和string类型的数据
        • ref:用于指定其他的bean类型数据,指的就是在spring的ioc核心容器中出现过的bean对象
      • 优势
        • 创建对象时没有明确的限制,可以直接使用默认构造函数
      • 弊端
        • 如果有某个成员必须有值,则获取对象时可能set方法没有执行
    • 使用注解提供

  • 复杂类型的注入

    • 用于给list结构集合注入的标签
      • list、array、set
    • 用于给map结构集合注入的标签
      • map、props
    • 结构相同,标签可以互换

配置pom.xml

 <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
</dependencies>

配置bean.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myService" class="com.lxc.service.impl.MyServiceImpl"></bean>

</beans>

执行代码

ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        MyService myService = (MyService) context.getBean("myService");
        myService.findAll();
发布了77 篇原创文章 · 获赞 43 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览