Spring框架IOC和DI

Java小课堂

分享人:韩要贺

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

Spring是一个基于IOC和AOP结构,J2EE系统的框架。IOC反转控制是Spring的基础,Inversion Of Control简单说就是创建对象由以前的程序员自己new构造方法来调用,变成了交由Spring创建对象;DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。 AOP是任务五里面的内容,今天暂时不讲

2.知识剖析

Spring框架的组成

1.核心容器通过 IOC/DI(依赖注入)来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。

2.Spring Context:提供了一种框架式的对象访问方法,Context封装包的特性得自于Beans封装包,applicationContext.xml是Spring的核心配置文件,通过关键字category即可获取Category对象,该对象获取的时候,即被注入了字符串"category 1“到name属性中

IOC和传统方式区别

1.传统的方式: 通过new 关键字主动创建一个对象

2.IOC方式 对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。

注入对象方式

1.setter getter方式(代码)

2.在applicationContext.xml 中要使用ref来注入另一个对象

注解常用词语

1.@Autowired,给这个测试类装配Category对象,可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get

2.@Resource,作用和@Autowired一样的,但是要加一个赋值(name="category")

3.@Component,为Category 类加上@Component注解,即表明此类是bean;为Product类加上@Component注解,即表明此类是bean

applicationContext.xml配置文件

applicationContext.xml放置的位置

applicationContext.xml作用,通过关键词category即可获取Category对象,该对象获取的时候,即被注入了字符串"category 1“到name属性中

怎么用注解的方式进行配置

TestSpring测试类

通过spring获取Category对象,以及该对象被注入的name属性。 代码里打印出通过Spring拿到的Category对象的name属性

3.常见问题

1.spring中的BeanFactory与ApplicationContext的作用和区别?

2.什么是自动装配

4.解决方案

1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。 2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能: 比如资源访问,事件传递,通过ApplicationContext扩展了ResourceLoader(资源加载器)接口。 3. ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些.

Spring容器能够自动装配相互合作的bean,这意味着容器不需要construor-arg和property配置,能通过Bean工厂自动处理bean之间的协作

5.编码实战

6.扩展思考

7.参考文献

3.张庆东、韦杰师兄的ppt

8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!