Spring5 IOC容器管理------基于XML方式

Spring———IOC (控制反转)

一、IOC容器

1、什么是IOC(控制反转)
  • 对象之间的调用和创建过程,交给Spring5进行管理
  • 使用IOC目的:为了降低耦合度
2、IOC底层原理
  • XML解析、工厂模式、反射
3、Spring 提供的IOC容器实现的两种方式(两个接口)
  • BeanFactory接口:IOC容器基本实现是Spring内部接口的使用接口,不提供给开发人员进行使用(加载配置文件时候不会创建对象,在获取对象时才会创建对象。)
  • =ApplicationContext接口:BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用(加载配置文件时候就会把在配置文件对象进行创建推荐使用!

二、IOC容器Bean管理

1、IOC操作Bean管理
  • Bean管理就是两个操作 a)Spring创建对象 b)Spring注入属性
2、基于XML创建对象
<!--   1.基于 xml文件  创建对象演示-->
    <bean id="username" class="com.zh.Day_01.Bean_demo.User" >
3、基于XML方式注入属性 ,有参的构造函数的注入

<!--   2.基于 set的方法注入属性值  name 是 bean类里面的名称 value 是属性的值-->
        <property name="name" value="小浩纸~"></property>
        <property name="age" value="19"></property>
        <property name="address" value="江西~"></property>

<!--    3.有参的构造函数的注入-->
        <constructor-arg name="name" value="小浩~"></constructor-arg>
        <constructor-arg name="age" value="199"></constructor-arg>
        <constructor-arg name="address" value="江西~"></constructor-arg>
4、注入空值null 和特殊字符
<!--    4.给属性注入null值-->
        <property name="name">
<!--            在里面加入一个null 标签-->
            <null></null>
        </property>
<!--    5.特殊字符的注入 1> 把<>进行转义 &lt ; &gt
                       2> 把特殊字符内容写到一个 <![CDATA[...]]> 内-->
        <property name="address">
            <value><![CDATA[<<南京>>]]></value>
        </property>
5、注入属性-外部注入bean
<!--    先创建两个对象-->
    <bean id="service" class="com.zh.Day_02.Bean_Demo_01.service">
<!--        注入属性dao对象
                name : 这个类里面的属性名
                ref  : 创建 dao这个类的 标签里的id值
-->
        <property name="daoText" ref="dao"></property>
    </bean>
    <bean id="dao" class="com.zh.Day_02.Bean_Demo_01.dao"></bean>
6、注入内部bean和级联赋值
  • 内部注入
<!--    内部bean 的演示
    <bean id="Emp" class="com.zh.Day_02.Bean_Demo_02.Emp">
<!--        给普通的属性注入值-->
        <property name="eName" value="小浩纸~"></property>
<!--        给类属性注入值  简称 内部bean-->
        <property name="eDept">
            <bean id="Dept" class="com.zh.Day_02.Bean_Demo_02.Dept">
<!--                给 Dept 属性赋值-->
                <property name="DName" value="技术部"></property>
            </bean>
        </property>
    </bean>-->
  • 级联bean 演示
<!--    联级bean 演示-->
    <bean id="Emp" class="com.zh.Day_02.Bean_Demo_02.Emp">
<!--        属性赋值-->
        <property name="eName" value="浩浩~~~"></property>
        <property name="eDept" ref="mmmm"></property>
    </bean>
    <bean id="mmmm" class="com.zh.Day_02.Bean_Demo_02.Dept">
        <property name="DName" value="技术部~~"></property>
    </bean>
  • 第二种方式
<!--    第二钟方法  必须添加一个get方法-->
    <bean id="Emp" class="com.zh.Day_02.Bean_Demo_02.Emp">
        <!--        属性赋值-->
        <property name="eName" value="浩浩~~~"></property>
        <property name="eDept" ref="mmmm"></property>
<!--        在bean 里面必须给 get方法-->
        <property name="eDept.DName" value="技术部门"></property>
    </bean>
    <bean id="mmmm" class="com.zh.Day_02.Bean_Demo_02.Dept">
<!--        <property name="DName" value="技术部~~"></property>-->
    </bean>
7、基于XML注入数组、集合属性
<!--    给 数组 集合 注入值-->
    <bean id="ZhouHao" class="com.zh.Day_02.Bean_Demo_03.Student">
<!--        给数组注入值-->
        <property name="array_" >
            <array>
                <value>java课程</value>
                <value>mysql</value>
            </array>
        </property>
<!--        给list 注入值-->
        <property name="list_" >
            <list>
                <value>江西</value>
                <value>南昌</value>
            </list>
        </property>
<!--        给set 注入值-->
        <property name="set_">
            <set>
                <value>帅哥</value>
                <value>嘿嘿</value>
            </set>
        </property>
<!--        给map 注入值-->
        <property name="map_">
            <map>
                <entry key="no1" value="小浩纸"></entry>
                <entry key="no2" value="浩浩"></entry>
            </map>
        </property>
8、在集合里面设置对象类型值
<!--        给list 对象属性注入值-->
<!--    给 数组 集合 注入值-->
    <bean id="ZhouHao" class="com.zh.Day_02.Bean_Demo_03.Student">
        <property name="list_course">
        <list>
            <ref bean="course1"></ref>
            <ref bean="course2"></ref>
        </list>
        </property>
    </bean>

<!--    创建多个对象-->
    <bean id="course1" class="com.zh.Day_02.Bean_Demo_03.Course">
        <property name="name" value="java__"></property>
    </bean>
    <bean id="course2" class="com.zh.Day_02.Bean_Demo_03.Course">
        <property name="name" value="mysql"></property>
9、提取集合中公共的部分进行注入
<!--    提取list集合 类型属性 注入-->
    <util:list id="ZhouHao">
        <value>java</value>
        <value>mysql</value>
        <value>html5</value>
    </util:list>
<!--   将提取list的属性进行注入-->
    <bean id="bbbb" class="com.zh.Day_02.Bean_Demo_04.book">
        <property name="listBook" ref="ZhouHao"></property>
    </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring-IOCSpring框架的核心部分之一,它是一种设计模式,全称为Inversion of Control(控制反转)。它通过将对象的创建、依赖关系的管理和对象的生命周期交给Spring容器实现,从而降低了组件之间的耦合度,提高了代码的可重用性和可维护性。Spring-IOC实现主要依靠Spring容器Spring容器Spring框架的核心,它负责创建、管理和装配Bean对象,其中Bean是Spring框架中最基本的组件。 Spring-IOC实现主要有两种方式:BeanFactory和ApplicationContext。其中,BeanFactory是Spring-IOC的基本实现,而ApplicationContext是BeanFactory的子接口,提供了更多高级特性。ApplicationContext是Spring框架中最常用的IOC容器,它除了提供BeanFactory的所有功能外,还提供了更多的企业级特性,例如AOP、事务管理、国际化、事件传播等。 下面是一个简单的Spring-IOC的例子,假设我们有一个UserService接口和一个UserServiceImpl实现类,我们可以通过Spring-IOC容器来创建和管理UserServiceImpl对象: 1.定义UserService接口和UserServiceImpl实现类 ```java public interface UserService { void addUser(User user); } @Service public class UserServiceImpl implements UserService { @Override public void addUser(User user) { // 添加用户的具体实现 } } ``` 2.在Spring配置文件中配置UserService实例 ```xml <bean id="userService" class="com.example.service.UserServiceImpl"/> ``` 3.在代码中获取UserService实例并使用 ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userService", UserService.class); User user = new User(); userService.addUser(user); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有心肝,只有干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值