Spring容器使用介绍

ioc

ioc是干什么的?
ioc是spring的一部分 , 其作用主要是管理类

  1. 导入spring坐标 – 版本为5.2.10.RELEASE

    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>5.2.10.RELEASE</version>
     </dependency>
    
  2. 创建接口

  3. 定义spring配置文件
    在resource中新建spring配置

    <bean id="ico" class="com.jixu.dao.impl.IocImpl"></bean>
    
  4. 初始化ioc容器

  5. 创建ApplicationContext对象

    ApplicationContext act = new ClassPathXmlApplicationContext("springContext.xml");
    

    使用getBean方法获取对象

    Ioc ico = (Ioc) act.getBean("ico");
    

DI

DI主要解决的问题是依赖注入 , 也就是说我在service层调用Dao层的时候 , 不可避免的需要new Dao层的对象
那么为了避免这个问题我们可以直接在配置文件中 注入到层对象
如何注入 ?

  1. 由于我们是要把Dao层的对象注入到service层 , 所以需要在service创建Dao属性 , 并且创建set方法
  2. 在配置文件中配置参数
    <bean id="service" class="com.jixu.service.impl.SerivceImpl">
         <property name="iocDao" ref="ico">
         </property>
     </bean>
    

Bean的实例化

1. 构造方法

在创建ApplicationContext的时候会调用配置文件中已经配置好类的构造方法 , 创建类对象

2. 静态工厂

早Spring容器中支持静态工厂的配置
什么是工厂模式?
工厂模式是管理类对象的一种方式, 可以将对象的创建交给工厂类来实现
Spring如何实现静态工厂模式?
传统方式 : 新建工厂类使用静态方法返回类对象 , 通过静态方法创建对象

public class DaoFactory {
 public static Ioc getDaoFactory(){
     return new IocImpl();
 }
}

Spring配置

  1. 通过FactoryMethod方法指定工厂类需要创建的对象
       <bean id="DaoFactory" class="com.jixu.factory.DaoFactory" factory-method="getDaoFactory"></bean>
    
  2. 创建ApplicationContext对象调用方法
       public static void main(String[] args) {
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springContext.xml");
          Ioc daoFactory = (Ioc) applicationContext.getBean("DaoFactory");
          daoFactory.run();
       }
    

3. 实例工厂

什么是实例工厂? 实例工厂的根本还是工厂模式 , 只是内部方法为非静态
如何实现?
1. 创建实例工厂类 , 继承FactoryBean接口 , 重写方法返回类对象
public class InstanceFactory implements FactoryBean { @Override public Object getObject() throws Exception { return new IocImpl(); } @Override public Class<?> getObjectType() { return null; } }
2. 完善配置文件
<bean id="DaoFactory" class="com.jixu.factory.InstanceFactory"></bean>

Bean的生命周期

  1. 初始化容器

    • 创建对象
    • 执行构造方法
    • 执行属性注入
    • 执行Bean初始化方法
  2. 使用Bean

    • 执行业务操作
  3. 关闭/销毁容器

    • close() 暴力关闭
    • registerShutdownHook() 注册关闭
  4. 聊一聊BeanFactory和ApplicationContext
    相同点 : 二者都是Spring中管理容器的接口
    不同点 : ApplicationContext是BeanFactory的子接口
    ApplicationContext是延迟加载 , 创建方式 --> 编程式 , 消耗内存较小启动较快
    BeanFactory是预加载 , 创建方式 --> 声明式 , 消耗内存较大启动较慢

  5. BeanFactory和FactoryBean之间的区别
    BeanFactory是一个工厂类 , 是Spring容器中的接口 , 用于管理Bean
    FactoryBean是一种Bean , 用于创建和返回Bean

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

攒了一袋星辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值