二、Spring IoC 容器

发布于:2022-11-28 ⋅ 阅读:(479) ⋅ 点赞:(0)

IOC容器及相关概念

什么是 IOC

  1. 控制反转,把对象创建和对象之间的调用过程,交给 Spring 容器来管理。
  2. 使用 IOC 的目的,为了解耦合。 

IOC 的底层原理 

XML、解析技术、工厂模式、反射

IOC 目的 

最低限度降低类与类之间的耦合度

IOC 实现 

  1.   IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂。
  2. Spring 提供了 IOC 容器两种实现方式
  •  (1) BeanFactory:IOC 容器基本实现接口,是 Spring 内部使用 的接口,不提供给开发人员使用 
  • (2) ApplicationContext:BeanFatory 接口的子接口,提供了更 多更强大的功能,一般由开发人员来使用

 IOC 操作:Bean 管理

在bean标签中有很多属性,介绍常用属性 

  • id属性:唯一标识
  • class属性:类全路径(包+类路径)
  • name属性:类似于id的作用,struts2框架提供的属性,被id属性代替. 

bean标签创建对象时,默认执行的是无参构造器完成对象创建 

什么是 Bean 管理 

  •  Spring 创建对象 
  • Spring 注入属性 

 Bean 管理操作的两种实现方式

  • 基于 XML 配置文件的方式
  • 基于注解方式 

Bean标签范围配置 

 1.当scope=“singleton”时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置Bean实例。
Bean的生命周期:

  • 对象创建:当应用加载,创建容器时,对象就被创建了
  • 对象运行:只要容器在,对象就一直活着
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁

2.当scope=“prototype”时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
Bean的生命周期:

  • 对象创建:当使用对象时,创建新的对象实例
  • 对象运行:只要对象在使用中,就一直活着
  • 对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了

 Bean生命周期配置

  •  init-method:指定类中的初始化方法名称
  • destory-method:指定类中销毁方法名称

Bean实例化的三种方法 

  •   无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化 

无参构造方法实例化代码演示

(1)创建接口

public interface UserDao {
    public void save();
}

 (2)实现接口方法

public class UserDaoImpl implements UserDao {
    public void save(){
        System.out.println("save running.....");
    }
}

 (3)配置xml文件

 <bean id="userDao" class="com.wzx.dao.impl.UserDaoImpl">

 </bean>

 (4)测试方法

public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app=
                new ClassPathXmlApplicationContext("bean02.xml");
        UserDao userDao= (UserDao) app.getBean("userDao");
        userDao.save();

    }
}

 (5)运行结果

 

 工厂静态方法实例化代码演示:在无参构造的基础上修改

(1)创建静态工厂类 

public class StaticFactory {
    //静态方法
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

 <bean id="userDao" class="com.wzx.factory.StaticFactory" 
 factory-method="getUserDao">
 </bean>

 工厂实例方法实例化代码演示:在无参构造的基础上修改

(1)创建工厂对象 

public class DynamicFactory {
    //不是静态的
    public UserDao getUserDao() {
        return new UserDaoImpl();
    }
}

 (2)修改xml配置文件

   <bean id="factory" class="com.wzx.factory.DynamicFactory"></bean>
    <bean id="userDao" factory-bean="factory" 
    factory-method="getUserDao"></bean>
本文含有隐藏内容,请 开通VIP 后查看