Spring:IOC之一

  • Spring是轻量级的开源的JavaEE框架
  • Spring解决企业应用开发的复杂性
  • Spring两个核心:IOC和AOP
    • IOC:控制反转:把创建对象交给Spring来管理
    • AOP:面向切面编程:不修改源代码进行功能的增强。
  • 特点
    • 方便解耦,简化开发
    • AOP编程的支持
    • 方便程序的测试
    • 方便集成各种优秀的框架
    • 方便进行事务的管理
    • 降低API的开发难度
  • 通过Spring5进行学习

  • 通过Spring5的方法创建对象

    1. 创建Spring配置文件,在配置文件中创建对象

      <bean id="user" class="com.boerk.spring5.User"></bean>
      
      //1.加载配置文件
      ApplicationContext context =
                  new ClassPathXmlApplicationContext("Bean.xml");
      //2.通过context获取配置文件的对象(反射)
      User user = context.getBean("user", User.class);
      

IOC容器

  • IOC底层原理

    • IOC:控制反转。把对象创建和对象之间的调用过程,交给Spring管理
    • 目的:为了耦合度降低。
    • 如上进行的入门案例就是基于IOC实现的
    • IOC底层原理:
      1. xml解析
      2. 工厂模式
      3. 反射
    • 实现原理:
      1. 通过工厂模式,在工厂类中获得需要的对象
      2. 工厂类中,通过xml解析获得class的属性值String classValue=...
      3. 通过反射创建对象Class clazz = Class.forName(classValue)
      4. 返回对象return(User)clazz.newInstance()
    • 在工厂模式的基础上,进一步降低耦合度。
  • IOC接口(BeanFactory)

    • IOC思想基于IOC容器完成的,IOC容器底层就是对象工厂
    • Spring提供了两种IOC容器的实现方式(两个重要的接口)
      • BeanFactory:IOC容器基本实现,是Spring内部使用的接口不提供给开发人员使用。
        • 加载配置文件ApplicationContext context =new ClassPathXmlApplicationContext("Bean.xml");使不会立即创建对象,在获取对象(User user = context.getBean("user", User.class))时才会去创建对象
      • ApplicationContext:是BeanFactory的子接口,提供了更强大的功能,一般是由开发人员使用的。
        • 加载配置文件时就已经创建了对象。
        • ApplicationContext的两个实现类ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,分别对应工程内的路径和磁盘上的路径。
  • IOC操作Bean管理(基于xml)

    • 由Spring来创建对象
    • 由Spring来注入属性
    • Bean管理的两种方式
      • xml配置文件
      • 注解的方式
  • IOC操作Bean管理(基于注解)

    • 创建对象

      <bean id="user" class="com.boerk.spring5.User"></bean>
      <!--
      id:你对象的表示
      class:你创建对象的全路径
      name:与id类似,里面可以加特殊符号。
      -->
      
      • 执行无参构造,去完成对象的创建。如果声明了有参却没有声明无参构造则会报错。
    • 注入属性

      • DI:依赖注入,就是注入属性
      1. 创建对应的对象

        <bean id="user" class="com.boerk.spring5.User"></bean>
        
      2. set方法的注入

        <bean id="user" class="com.boerk.spring5.User">
        	<property name="bname" value="五年高考三年模拟"></property>
        </bean>
        <!--
        name:类里面属性的名称
        value:对应属性的值
        -->
        
      3. 使用有参构造注入

        1. 创建实体类的有参构造方法

        2. 创建实体类对象

        3. 使用有参构造器

          <constructor-arg name="userName" value="Boerk"></constructor-arg>
          <!--
          name:类里面属性的名称
          value:对应属性的值
          -->
          
      4. p名称空间注(了解)

        1. 添加一个p名称精简在配置文件中

        2. 进行属性的注入。<bean id="user" class="com.boerk.spring5.User" p:name="hello">


使用xml配置文件完成其他类型的属性的注入

  • 设置空值

    • 在property中再加一个<null>标签
  • 属性值包含特殊符号

    • 使用转义字符

    • 把特殊符号的内容加到CDATA里面去

      <value><![CDATA[<<南京 >>]]></value>
      
  • 属性为外部对象的

    • 在配置文件中<property>中使用ref代替value,ref的value为你创建的其他bean对象的id
  • 属性为内部对象的

    • 在配置文件中,给一个对象注入属性的时候,嵌套一个对象的创建,则该对象为一个内部对象。

      <property name="department">
          <bean id="dept" class="com.boerk.spring5.bean.Department">		</bean>
      </property>
      
  • 级联赋值

    • 外部对象时其实就是第一种级联赋值

    • 通过生成对象(get)在通过对象.属性的方式赋值

      <bean id="emp" class="com.boerk.spring5.bean.Emp">
          <property name="ename" value="Boerk"></property>
          <property name="gender" value="女"></property>
          <property name="department" ref="dept"></property>
          <property name="department.dename" value="财务部"></property>
      </bean>
      <bean id="dept" class="com.boerk.spring5.bean.Department"></bean>
      

FactoryBean

Spring里有两种Bean

  • 普通的Bean

    • 在配置文件中定义什么类型就返回什么类型
  • 工厂Bean

    • 在配置文件中定义的类型可以和返回的类型不一样。
  • 创建一个类,去实现工厂bean的接口,FactoryBean

  • 重写getObject方法,修改返回值类型即可。

posted @   Boerk  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示