Spring框架IOC和DI

作者: 素履之往_3e36 | 来源:发表于2018-01-15 23:22 被阅读8次

    大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。

    今天给大家分享一下,修真院官网JAVA任务1中,SPRING框架IOC和DI.

    一、背景介绍

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


    二.知识剖析

    一.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配置文件

    1.applicationContext.xml放置的位置

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

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

    六。TestSpring测试类

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

    三.常见问题

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

    2.什么是自动装配

    四.解决方案

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

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

    六、扩展思考

    七、参考文献

    张庆东师兄的PPT

    八、更多讨论

    @Autowired和@Resource的区别是什么

    答:@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

    1、共同点

    两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

    2、不同点

    (1)@Autowired

    @Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

    @Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用.

    (2)@Resource

    @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略

    详见视频

    https://v.qq.com/x/page/a0533sllb9z.html腾讯视频                      

    感谢大家观看

    今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

    技能树.IT修真院

    “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

    这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

    我的邀请码:19214843,

    或者你可以直接点击此链接:http://www.jnshu.com/login/1/19214843

    作者:kewangbuji

    链接:

    來源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:Spring框架IOC和DI

        本文链接:https://www.haomeiwen.com/subject/acdjoxtx.html