luckydog

V1

2022/04/18阅读:8主题:默认主题

Spring_IOC

Spring IOC

IOC介绍

控制反转:把对象的创建和对象之间的调用过程交给Spring容器进行管理 --> 目的:降低耦合度,方便开发

IOC底层原理:xml解析,工厂模式,反射

    1. xml解析得到bean标签的name 和 clazz路径
    1. 反射Class.forName(clazz).newInstance创建bean对象
  • 这就是工厂模式,只是工厂模式解耦效果还不够,因此我们用了xml实现进一步解耦
private List<MyBean> beanList;  //存放从配置文件获得的bean标签的信息
    private Map<String, Object> beanMap = new HashMap<>();

IOC容器

IOC思想基于IOC容器完成,IOC容器底层是对象工厂

Spring提供IOC容器实现两种方式(两个接口):

  • BeanFactory:IOC容器基本实现,Spring内部的使用接口
    加载配置文件的时候不会创建对象,再使用(获取对象)的时候才去创建
  • ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用
    在加载配置文件的时候就会把配置文件的对象创建

ApplicationContext两个实现类

  • ClassPathXmlApplicationContext
  • FileSystemXmlApplicationContext

Bean管理

Bean的作用域

  • spring里面设置创建的Bean是单实例还是多实例(默认是单实例即创建多个只有一个地址)
  • bean标签属性scope设置单还是多(singleton和prototype),scope设置为prototype的时候,不是在加载配置文件的时候创建对象,而是在调用getBean方法的时候创建
  • request,session 此时每个创建对象放到request或者session域中

Bean的生命周期(7步)

  • 1.通过构造器创建bean实例(默认无参)
  • 2.为bean的属性设置值和对其他bean引用(set方法)
  • 3.调用bean的初始化方法(配置init_method)后置处理器
  • 4.得到bean对象
  • 5.当容器关闭的时候,调用bean的销毁方法(配置destory-m)

1、什么是Bean管理

(1)创建对象
(2)注入属性

2.两种Bean管理方式

(1)xml配置

创建对象

  1. bean标签添加响应属性,实现对象创建
  • id :唯一标识
  • class :类全路径
  1. 创建对象时,默认使用无参构造,如果类没有无参构造,报错

注入属性 自己内部属性,其他类对象,list,array,map,set

  • 1.有参构造,bean标签里面使用constructor-org
  • 2.set方法注入,bean标签里面使用properties
  • 外部properties文件
  • p命名空间

(2)注解

对象创建
@Component
@Service
@Controller
@Repository
这几个注解功能都是一样的,注解里面value值可以省略不写,默认id是类名小写

开启组件自动扫描之后,use-default-filters=false表示不适用默认扫描的filter,自己设置是include-filters 和 exclude-filters,一个包含,一个不包含

属性注入
@AutoWired:根据属性类型进行自动装配
@Qualifier:根据属性名称进行注入,value属性值(考虑一个接口有多个实现类的情况下注入接口)
@Resource:可以根据类型注入,也可以根据名称注入(name属性值),属于javax拓展包,不是spring的
@Value:注入普通类型,value属性值

(3)完全注解开发

编写一个类使用@Configuration和@Component(扫描)注解

分类:

后端

标签:

后端

作者介绍

luckydog
V1