欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring(二)——IOC

程序员文章站 2022-03-19 15:00:40
...

IOC(BeanFactory)

  1. IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
  2. Spring 提供两种IOC容器实现的两种方式:(两个接口)
    (1)BeanFactory
    IOC容器最基本实现方式,一般都不提供给开发人员进行使用,是Spring框架自己内部的使用的接口,在加载配置文件后,一般只会找到该类,但是不会立马去加载配置文件,在获取(使用)对象的时候才会创建,这也是利用了懒汉式模式
    (2)ApplicationContext:
    BeanFactory 接口的子接口,提供更强大的功能,一般都是开发人员使用,而且找到该类后就会创建对象,这也是利用了饿汉式模式
  3. ApplicationContext的接口实现类
    Spring(二)——IOC

IOC操作Bean管理(概念)

  1. 什么是Bean管理

    Bean 管理是指两个操作:
    		 Spring创建对象、
    		 Spring注入属性
    

IOC操作Bean管理(基于xml方式)

  1. 基于xml方式创建对象

    前文提到,通过注解就可实现,这里就不把代码重写了
    (1)在spring 配置文件中,使用bean标签,标签里面添加对应的属性,就可以实现对象创建
    (2)在bean标签有很多属性,常用的属性
    id属性:唯一标识符
    class属性:类全路径(包类路径)
    (3)创建对象时,默认的也是无参构造方法完成对象的创建

  2. 基于xml文件方式注入属性
    DI:依赖注入,注入属性

  3. DI中两种注入属性的方法,一种是setter方法,一种是构造器方法注入
    (1)settter方法注入
    第一步;创建一个类,让类拥有setter方法
    IDEA中alt+insert键可以直接生成
    Spring(二)——IOC

public class Music {
    //创建属性
    private String musician;    //歌手
    private String musicname;   //歌曲名

    public void setMusician(String musician) {
        this.musician = musician;
    }

    public void setMusicname(String musicname) {
        this.musicname = musicname;
    }
//重写toString方法,便于打印输出美观
    @Override
    public String toString() {
        return "Music{" +
                "musician='" + musician + '\'' +
                ", musicname='" + musicname + '\'' +
                '}';
    }
}

第二步:在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">
    <!--spring配置文件,setter方法让属性注入-->
    <bean id="music" class="spring5_demo01.bean.Music">
        <!--
            使用property 完成属性注入
            name:类里面的属性
            value:类里面的值
            类似于键值对的形式
        -->
        <property name="musician" value="许嵩"></property>
        <property name="musicname" value="素颜"></property>
    </bean>
</beans>

第三步:测试

@Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring3.xml");
        Music music = (Music) context.getBean("music");
        System.out.println(music.toString());
    }

测试的结果,发现值已经被注入了
Spring(二)——IOC(2)第二种构造器参数注入,使用有参构造进行注入
第一步,正常创建一个类,并设置一个构造方法

public class Email {
    //创建属性
    private String emailTo; //收件人
    private String emailFrom;   //发件人
    //创建一个有参构造函数
    public Email(String emailTo, String emailFrom) {
        this.emailTo = emailTo;
        this.emailFrom = emailFrom;
    }

    @Override
    public String toString() {
        return "Email{" +
                "emailTo='" + emailTo + '\'' +
                ", emailFrom='" + emailFrom + '\'' +
                '}';
    }
}

第二步:写spring 配置文件
有参构造函数的写法

<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="email" class="spring5_demo01.bean.Email">
        <constructor-arg name="emailTo" value="梅西"></constructor-arg>
        <constructor-arg name="emailFrom" value="粉丝"></constructor-arg>
    </bean>
</beans>

第三步:测试

@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring4.xml");
        Email email = (Email) context.getBean("email");
        System.out.println(email.toString());
    }

Spring(二)——IOC
测试成功!

初次之外,还有p名称空间注入,在p名称的配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/p
                           http://www.springframework.org/schema/p/spring-beans.xsd">
    <bean id="email" class="spring5_demo01.bean.Email">
        <constructor-arg name="emailTo" value="梅西"></constructor-arg>
        <constructor-arg name="emailFrom" value="粉丝"></constructor-arg>
    </bean>
    <bean id="email1" class="spring5_demo01.bean.Email" p:emailTo="C罗" p:emilFrom="C罗粉丝"></bean>
</beans>

这里就不具体讲解了,可以自己去了解!

相关标签: ioc