Spring的IOC容器(中)

1.IOC介绍

  1. 控制反转IOC是一种思想,可以降低耦合度提高程序拓展力,反转的是将创建对象的权力以及对象与对象之间的维护权交出去给第三方容器负责,实现控制反转思想主要采用的是依赖注入DI
  • 依赖注入的意思是Spring创建对象的过程中,将对象的依赖属性通过配置进行注入
    • set 注入
    • 构造注入
  • IOC在Spring的实现主要是两种方式 : BeanFactory 以及 ApplicationContext ( 配置文件 )
    • BeanFactory : 是 ApplicationContext 的父接口 ,Spring 的核心容器, 主要的 ApplicationContext 实现都【组合】了它的功能, 意味着BeanFactory是ApplicationContext的成员变量
      • 表面上只有 getBean
      • Bean 的生命周期的各种功能, 都由它的实现类提供
    • ApplicationContext :
      • ApplicationContext 组合并扩展了 BeanFactory 的功能
      • 国际化、通配符方式获取一组 Resource 资源、整合 Environment 环境、事件发布与监听
      • 增加了一种代码之间解耦途径
    • Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器一创建就将Bean都实例化并初始化好。
    • BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring容器
    • BeanFactory需要手动注册,而ApplicationContext则是自动注册

2. IOC 的使用

  1. 基于XML管理Bean : setter注入 构造注入(根据类型获取的时候,指定类型的bean只能是一个)
  • 如果组件实现了接口,根据接口类型能够获取bean,但是前提必须是bean唯一
  • 如果一个接口有很多实现类,都配置了bean,根据接口类型不能获取bean,因为bean不唯一
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");//类型获取
HelloWorld bean = ac.getBean(HelloWorld.class);
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");//id和类型获取
HelloWorld bean = ac.getBean("helloworld", HelloWorld.class);
  • setter注入前提是必须有set、get方法
<bean id="studentOne" class="com.xszx.bean.Student">
    <!-- property标签:通过组件类的setXxx()方法给组件对象设置属性 -->
    <!-- name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关) -->
    <!-- value属性:指定属性值 -->
    <property name="id" value="1001"></property>
    <property name="name" value="张三"></property>
    <property name="name"><null /></property>//null值注入,小于号也不能随意使用
</bean>
  • 构造器注入前提是要有构造方法
<!-- index 属性:指定参数所在位置的索引(从0开始) -->
<!-- name 属性:指定参数名 -->
<bean id="studentTwo" class="com.xszx.bean.Student">
  <constructor-arg value="1002"></constructor-arg>
  <constructor-arg value="李四"></constructor-arg>
</bean>
  • 小知识点
  • 小知识点 :
    • 特殊值处理 :<null/>,小于号
    • 对象、集合、map、list、引用集合
    • p命名空间
    • 引入外部属性文件<context:property-placeholder location="classpath:jdbc.properties"/>
    • bean作用域 :scop属性指定,有单例(默认singleton)和多例(prototype)
    • bean生命周期 :
      • bean对象创建、bean对象设置属性
      • bean后置处理器(初始化之前)
      • bean对象初始化,指定初始化方法
      • bean后置处理器(初始化之后)
      • bean对象就绪使用
      • bean对象销毁,指定销毁方法
      • IOC容器关闭
    • FactoryBean :获取 bean 的时候得到的并不是 class 属性中配置的这个类的对象,而是getObject() 方法的返回值
    • 基于xml的自动装配 ,autowire属性设置 : byType 和 byName
  1. 基于注解管理实现自动装配Bean步骤 : 引入依赖--开启组件扫描--使用注解定义 Bean--依赖注入
  • 开启扫描组件 <context:component-scan base-package="com.xszx"/>,记得在 XML 配置的一级标签 <beans> 中添加 context 相关的约束。
  • @Autowired 注解进行属性注入,默认根据类型装配。【默认是 byType】,
    • 构造方法、普通方法、形参、属性、注解上 ;
    • 当带参数的构造方法只有一个,@Autowired 注解可以省略。
    • 如果要根据名称注入的话,需要配合 @Qualifier 注解一起使用。
    • 注解是Spring框架自己的
  • @Resource 注解进行属性注入,默认根据名称装配也就是byName。
    • 未指定name时,就会将属性名作为name,通过name找不到就会自动通过byType装配。
    • 属性上,setter方法上
    • 属于JDK拓展包,需要额外引入依赖使用
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值