【Spring5】IOC容器与解耦合(中)

简介: 文章目录1 IOC的概念与刨析1.1 IOC简介1.2 IOC底层原理1.3 IOC容器1.3.1 何为容器?1.3.2 IOC容器的理解2 IOC操作Bean管理2.1 Bean管理2.2 Bean管理xml形式2.2.1 创建对象与注入过程2.2.2 注入空值和特殊符号2.2.3 注入属性2.2.3.1 外部bean与内部bean2.2.3.2 注入集合2.3 工厂Bean2.4 Bean的作用域2.5 Bean的生命周期2.6 xml自动装配(偷懒的技巧)

2.在spring配置文件配置对象创建与属性注入。

<?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 id="book" class="com.hxh.Book">
        <!--set属性注入-->
        <!--使用property完成属性注入-->
        <property name="bname" value="Java程序设计"></property>
        <property name="bauthor" value="Spring5开发实践"></property>
    </bean>
</beans>

3.测试

  @Test
    public void testBook(){
        //1.加载spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        //2.获取配置创建的对象
        Book book = context.getBean("book", Book.class);
        //3.输出相关信息
        book.testDemo();
    }


演示使用有参构造注入属性


1.首先,创建一个类,在类中提供相应的有参构造方法。以Srudent类为例!

public class Student {
    private String sname;
    //有参构造
    public Student(String sname) {
        this.sname = sname;
    }
    //方便测试
    public void testDemo(){
        System.out.println("sname = " + sname);
    }
}

2.在spring配置文件配置对象创建与属性注入。

<?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 id="student" class="com.hxh.Student">
        <constructor-arg name="sname" value="黄小黄"></constructor-arg>
    </bean>
</beans>

3.测试。(其实和set注入大同小异,往后xml配置文件就不再赘述了)

    @Test
    public void testStudent(){
        //1.加载Spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
        //2.获取配置的对象
        Student student = context.getBean("student", Student.class);
        //3.输出相关信息
        student.testDemo();
    }


2.2.2 注入空值和特殊符号

以2.2.1演示的book类为例,演示代码如下:

    <!--配置对象创建-->
    <bean id="book" class="com.hxh.Book">
        <!--注入空值-->
        <property name="bname">
            <null/>
        </property>
        <!--注入特殊符号-->
        <property name="bauthor">
            <value>
                <![CDATA[<><><><><>....具体值]]>
            </value>
        </property>
    </bean>

注入特殊符号除了以上的方式,还可以使用转移符号。


2.2.3 注入属性

2.2.3.1 外部bean与内部bean

创建两个类,一个接口UserDao,对应的实现关系及内部方法如下图所示:


此时如果想在UserService里调用UserDaoImpl中的方法该怎么做?


传统方式如下图:


在Spring中可以通过配置实现:

1.在UserServie中创建UserDao类型的属性,并生成对应的set方法,方便注入(2.2.1演示过,这里不再赘述)。

2.在配置文件中进行配置。注意ref属性需要与被注入的bean id保持一致(参照的bean)!

    <!--service和dao对象创建-->
    <bean id="userService" class="com.ithxh.spring5.service.UserService">
        <!--注入userDao对象
            name属性值:类里面属性名称
            ref属性:创建userDao对象bean标签的id值
        -->
        <property name="userDao" ref="userDao"></property>
    </bean>
    <bean id="userDao" class="com.ithxh.spring5.dao.UserDaoImpl"></bean>
相关文章
|
4月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
4月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
547 3
|
8月前
|
XML 人工智能 Java
Spring IOC 到底是什么?
IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
219 1
|
9月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
256 0
|
XML Java 数据格式
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
183 1
|
XML 设计模式 Java
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
267 0
「推荐收藏!」【Spring源码探究】(一)IOC容器初始化🏅彻底让你明白运行原理和源码流程
|
XML Java 数据格式
Spring源码阅读-IOC容器初始化过程
Spring IOC容器的初始化过程:Resource定位,BeanDefinition载入,向IOC容器注册BeanDefinition。整个过程由refresh()方法触发,三个过程由不同的模块完成,使用户更加灵活的对这三个过程剪裁和扩展。
430 0
|
XML JavaScript Java
Spring IoC容器初始化过程(xml形式)
Resource是Spring中用于封装I/O操作的接口,在创建Spring的容器的时候,会根据xml对应配置的类型,加载不同的数据类型
138 0