SpringIOC和DI以及生命周期

本文深入探讨了Spring框架中的控制反转(IOC)和依赖注入(DI)概念,阐述了如何通过DI实现对象的管理,包括set注入、构造方法注入和注解注入,并详细讲解了不同数据类型的注入支持。此外,还介绍了Spring对bean的管理,如对象的创建(无参构造、工厂方法创建)、作用域(单例、多例)以及对象的生命周期管理,包括初始化、使用和销毁过程。最后,通过实例展示了bean生命周期的各个阶段。
摘要由CSDN通过智能技术生成

Spring IOC:将对象交给容器管理

IOC(Inversion of Control 即控制反转)

IOC:

控制反转:Ioc 是面向对象编程的一种设计原则,可以用来减低计算机代码之间的耦合度。

其中最常见的方式叫依赖注入(Dependency Injection,简称DI)。

IOC:将对象的控制权反转给spring容易进行管理。

DI:将对象之间的依赖关系以注入的方式进行实现。

DI实现方式:

1.set注入======》通过set方法将对象的依赖关系进行维护

2.构造方法=====》通过构造方法将对象的依赖关系进行维护

3.注解注入=====》通过注解方式将对象的依赖关系进行维护

DI数据类型的支持:

1.JavaBean对象类型

2.String和基本数据类型

3.复杂类型(构造注入不支持) Map List Array properties Set

DI实现的步骤:

1.挑选实现方式并创建对应的方法

2.查看注入数据是否支持

3.编写配置<bean>此位置

Spring对bean的管理:

1.对象的创建

1.1通过无参构造方法创建(默认)

1.2通过指定工厂创建对象

public class TeacherFactory {
    public Teacher getTeacher(){
        System.out.println("普通工厂创建");
        return new Teacher();
    }
}

1.3通过指定静态工厂创建对象

public class TeacherStaticFactory {
    public static Teacher getTeacher(){
        System.out.println("静态工厂执行");
        return new Teacher();
    }
}
<!--        无参创建对象-->
   <bean id="teacher" class="com.apesource.bean.Teacher" ></bean>
<!--    普通工厂创建对象-->
   <bean id="teacher" class="com.apesource.bean.Teacher" factory-bean="teacherfactory" factory-method="getTeacher"></bean>
   <bean id="teacherfactory" class="com.apesource.factory.TeacherFactory"></bean>
<!--    静态工厂创建-->
	<bean id="teacher" class="com.apesource.factory.TeacherStaticFactory" factory-method="getTeacher"></bean>

2.对象的作用域

含义:对象的创建方式

语法:scope="作用域关键字"

位置:< bean scope="属性值">

属性值:

singleton==============》单例

prototype===============》多例

request================》一个请求创建一个对象

session================》一个会话创建一个对象

单例

<!--单例 默认-->
<bean id="teacher" class="com.apesource.bean.Teacher"></bean>
 //单例
        ApplicationContext applicationContext = new 			ClassPathXmlApplicationContext("applicationContext.xml");
        Teacher teacher1=(Teacher) applicationContext.getBean("teacher");
        Teacher teacher2=(Teacher) applicationContext.getBean("teacher");
        System.out.println(teacher1==teacher2);//true

多例

<!--多例-->
    <bean id="teacher" class="com.apesource.bean.Teacher" scope="prototype"></bean>

//多例
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Teacher teacher1=(Teacher) applicationContext.getBean("teacher");
        Teacher teacher2=(Teacher) applicationContext.getBean("teacher");
        System.out.println(teacher1==teacher2);//false

3.对象的生命周期

多例状态:

1.实例化; getBean()调用时候进行实例化

2.属性赋值: 像类的成员变量通过DI进行属性赋值 实例化之后

3.初始化:  属性赋值之后

4.操作使用:

5.销毁: GC回收机制  执行完此方法之后销毁 不可控制

单例状态:

1.实例化; 默认情况下,spring在读取xml文件的时候,就会创建对象。

2.属性赋值: 像类的成员变量通过DI进行属性赋值 实例化之后

3.初始化:  属性赋值之后

4.操作使用:

5.销毁: GC回收机制  执行完此方法之后销毁 可控制

public class Student {
    private String name;
    public Student() {
        System.out.println("实例化");
    }
    public void init(){
        System.out.println("初始化");
    }

    public void setName(String name) {
        this.name = name;
        System.out.println("属性赋值");
    }
    public void show(){
        System.out.println("发芽");
    }
    public void destroy(){
        System.out.println("销毁!");
    }
}
<!--    bean的生命周期-->
    <bean id="student" class="com.apesource.bean.Student" init-method="init" destroy-method="destroy">
        <property name="name" value="学生"></property>
    </bean>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值