当前位置: 代码迷 >> 综合 >> IOC(Inversion of Control) 控制反转
  详细解决方案

IOC(Inversion of Control) 控制反转

热度:44   发布时间:2023-12-03 17:06:50.0

IOC

  • Spring 中 Bean 工厂里面的 Map 存储结构(存储了 Bean 的实例)。

Spring API 体系结构

在这里插入图片描述

BeanFactory 与 ApplicationContext 的区别

BeanFactory 才是 Spring 容器中的顶层接口。
ApplicationContext 是它的子接口。
BeanFactory 和 ApplicationContext 的区别:创建对象的时间点不一样。ApplicationContext:适用于单例对象只要一读取配置文件,默认情况下就会创建对象。BeanFactory:适用于多例对象什么使用什么时候创建对象。

ApplicationContext 接口的实现类

FileSystemXmlApplicationContext:配置文件在本地磁盘上,使用该类加载。	
ClassPathXmlApplicationContext :配置文件在classpath中,使用此类加载。
AnnotationConfigApplicationContext:	当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

bean

bean 标签

作用:用于配置对象让 spring 来创建的。		默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。	属性:	id:给对象在容器中提供一个唯一标识。用于获取对象。class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。scope:指定对象的作用范围。* singleton :默认值,单例的.* prototype :多例的.* request  :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.* session  :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.* global session  :WEB 项目中,应用在 Portlet 环境.如果没有 Portlet 环境那么globalSession 相当于 session.init-method:指定类中的初始化方法名称。destroy-method:指定类中销毁方法名称。静态工厂factory-method:指定生产对象的静态方法实例工厂factory-bean 属性:用于指定实例工厂 bean 的 id。factory-method 属性:用于指定实例工厂中创建对象的方法。依赖注入构造函数constructor-arg				* name:指定参数在构造函数中的名称* value:它能赋的值是基本数据类型和 String 类型* ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 beanSet方法property* name:找的是类中 set 方法后面的部分				* value:给属性赋值是基本数据类型和 string 类型的* ref:给属性赋值是其他 bean 类型的注入集合属性List 结构的:array,list,setMap 结构的map,entry,props,prop* value
bean 的作用范围和生命周期单例对象:scope="singleton"一个应用只有一个对象的实例。它的作用范围就是整个引用。生命周期:对象出生:当应用加载,创建容器时,对象就被创建了。对象活着:只要容器在,对象一直活着。对象死亡:当应用卸载,销毁容器时,对象就被销毁了。多例对象:scope="prototype"每次访问对象时,都会重新创建对象实例。生命周期:对象出生:当使用对象时,创建新的对象实例。对象活着:只要对象在使用中,就一直活着。对象死亡:当对象长时间不用时,被 java 的垃圾回收器回收了。

实例化 bean 的三种方式

默认无参构造

实现类

public class UserServiceImpl implements UserService {
    private UserDao dao = new UserDaoimpl();    public void saveUser() {
    dao.saveUser();}
}

配置文件

<!--在默认情况下:它会根据默认无参构造函数来创建类对象。如果 bean 中没有默认无参构造函数,将会创建失败。-->
<bean id="UserService" class="com.itheima.service.impl.UserServiceImpl"></bean>
管理静态工厂

实现类

public class StaticFactory {
     public static IAccountService createAccountService(){
    return new AccountServiceImpl();}
}

配置文件

<!-- 此种方式是:使用 StaticFactory 类中的静态方法 createAccountService 创建对象,并存入 spring 容器-->
<bean id="accountService" class="com.itheima.factory.StaticFactory"factory-method="createAccountService"></bean>
管理实例工厂

实现类

public class InstanceFactory {
    public IAccountService createAccountService(){
    return new AccountServiceImpl();}
}

配置文件

<bean id="instancFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService"factory-bean="instancFactory"factory-method="createAccountService"></bean>
  相关解决方案