D40-Spring(ioc xml的配置)

一、IOC的相关概念

1.1 IOC

  • ioc(容器): 控制反转

    • 作用:解代码的耦合并创建管理对象
    • 直接问ioc容器要对象即可

  • ioc是spring的核心技术之一。

1.2 Spring框架

  • 是封层的轻量级开源框架,以IOC(控制反转)AOP(面向切面编程) 为内核。提供了展现层 SpringMVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术。还可以整合第三方框架和类库。

二、Spring的IOC操作

2.1 搭建环境

  1. 导入 ioc 的坐标。
  2. 配置xml文件
  3. java代码实现

2.2 IOC属性

  • Bean标签: 指定要创建的对象

    • id属性:代表唯一标识
    • class属性:代表要创建对象的类的全限定名
      • scope属性:范围
        取值:singleton 单例(默认)
        特点:对象会随着容器的创建而创建 对象会随着容器的销毁而销毁
  • prototype 多例

    • 特点:对象的创建和销毁和容器无关,会随着调用getbean方法的时候 才创建对象 调用一次 创建一次新的对象
    • 销毁是跟着垃圾回收机制走的
    • 应用场景:根据当前类的线程安全来决定的
  • 线程安全的类: singleton

  • 线程不安全的类: prototype

    • 例如:sqlSessionFactory(线程安全)singleton
      sqlSession(线程不安全)prototype
  • 了解属性:

    • init-method:配置初始化方法
      • 特点:对象只要一创建出来 就会立即执行配置好的初始化方法
    • destory-method:配置销毁方法的
      • 特点:对象只要一销毁 之前就会立即执行配置好的销毁方法
 <bean id="accountService" class="com.serviceimpl.AccountServiceImpl" scope="prototype"
          init-method="aaa" destroy-method="bbb"></bean>

2.3 spring的ioc创建对象的三种方式

2.3.1 通过无参构造器反射的方式

  • 格式: < bean id =“唯一值” class=“类的全限定名”>

2.3.2 静态工厂模式

  • 特点: 工厂的方法都是静态的,可以 类名.方法名()
<bean id="accountService" class="com.serviceimpl.AccountServiceImpl"></bean>

2.3.3 实例工厂模式

  • 特点: 工厂的方法都是非静态的,得先有工厂的实例,才能调用工厂的方法
<bean id="factory" class="com.utils.BeanFactory2"></bean>
    <bean id="accountService" factory-bean="factory" factory-method="getBean"></bean>

2.4 Spring 中的依赖注入

  • 给当前类的属性进行赋值
    • spring给你提供了赋值的技术—依赖注入(DI)
    • 依赖注入:对存在的依赖关系的属性或者对象自动赋值
    • 都会给哪些类型的属性赋值:
      • 简单属性:int String 包装类型
      • 复杂属性:数组,list set map
      • 对象属性:自定义的对象

构造器给该类的属性赋值(DI)

属性

  • index:根据参数的角标位置来定位参数
  • name:根据参数的名称来定位
    type:根据参数的全限定名来定位
    • 以上三个属性时用来定位参数的
      value:给简单属性赋值
      ref:给对象属性赋值
      在二级结构中,可以使用标签给复杂类型属性赋值
    • 以上两个属性是用来赋值的
<constructor-arg name="arr"  >
            <array>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </array>
        </constructor-arg>

set属性的方式

属性:

  • name属性:用来定位参数 定位的是set方法后面的那个名称 首字母小写
    • 底层:gameName将首字母变成大写GameName加上set==去类中匹配该方法
  • value属性:给简单属性赋值
  • ref属性:给对象属性赋值
<property name="arr">
            <array>
                <value>aaa</value>
                <value>ccc</value>
                <value>bbb</value>
            </array>
        </property>

在二级结构中可以使用标签给复杂属性赋值

复杂类型属性 要使用二级结构标签

数组:list set

  • 使用组合任意搭配:
    • array=value
    • list=value
    • set = value
  • 键值对:map properties
    • 使用组合任意搭配:
      map = value
      properties = value
<property name="map">
           <!-- <props>
                <prop key="1">aaaaaa</prop>
                <prop key="2">bbbbbb</prop>
                <prop key="3">cccccc</prop>
            </props>-->
            <!--给map键值对赋值可以有两种方式-->
            <map>
                <entry key="1" value="a"></entry>
                <entry key="2" value="b"></entry>
            </map>
        </property>

对象 属性的注入

  • ref:指向的是被spring容器管理的对象的id()
<bean id="accountService4" class="com.serviceimpl.AccountServiceImpl4">
 <!--
  需要一个dao
     ref:指向的是被spring容器管理的对象的id()
      <constructor-arg name="accountDao" ref="accountDao"></constructor-arg>
   -->
<property name="accountDao" ref="accountDao"></property>
    </bean>
 <!--dao层
        此处的id为property中  ref 指向。
    -->
    <bean id="accountDao" class="com.daoimpl.AccountDaoImpl"></bean>

测试层

此处才accountService4与上面的 bean对应。

/ioc的方式
        //创建容器
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
        //问容器要对象
        AccountService accountService4 = (AccountService)applicationContext.getBean("accountService4");
        //根据获取的对象,执行方法
        accountService4.save();

三、总结

  • IOC:解代码的耦合,创建管理对象

  • 使用:1 导入ioc坐标 2 设置配置文件 3 编写ioc的api问容器要对象

  • 配置文件的标签介绍:

    • bean标签:指定创建对象
    • id属性:代表唯一
    • Class属性:代表类的全限定名 (反射方式创建对象)
    • Scope属性:代表使用单例对象还是多例对象
    • Singleton:默认就是单例对象 特点:对象随着容器的创建而创建 随着容器的销毁而销毁
    • Prototype: 代表就是多例对象 特点:对象的创建和销毁和容器没有关系 getbean的时候才创建对象 调用一次创建一次
  • 应用场景:线程安全用Singleton 线程不安全用Prototype

  • Spring的ioc创建对象的三种方式:无参构造器反射方式 静态工厂 实例工厂

  • ioc的api介绍:

  • ApplicationConext接口:

    • ClassPathXmlApplication:加载配置文件的 (今天xml配置ioc)
    • AnnotationConfigApplicationContext: 加载配置类的(注解配置ioc)
    • 方法:getBean(id属性值) 问容器要对象
  • DI:依赖注入

    • 作用:可以给该类中有关系的属性进行赋值
    • 属性分了三种: 简单属性 复杂属性 对象属性
    • 依赖注入提供了2种方式给属性注入:构造器方式 set属性方式
      • 构造器:< constructor-arg>
      • Set属性方式:< property>
  • 属性介绍:针对构造器方式
    在这里插入图片描述
    属性介绍:针对set属性方式
    在这里插入图片描述

  • 复杂类型的注入:

    • 数组 list set array=value list=value set=value
    • 键值对:map properties map=entry props=prop
  • 对象类型的注入:
    1 该对象要给ioc容器创建管理
    2 使用ref属性进行注入 ref=ioc容器中管理对象的id标识

  • ioc是spring核心功能之一:用来给java程序解耦合并且创建管理对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值