读Spring4.0 笔记1

读spring4.0 的笔记并不是按照顺序记录的,而是平时遇见了什么问题,查书记录。主要会记录SpringBoot 和spring 的不一样的地方

使用Spring 框架开发,主要完成两件事:①开发Bean;②配置Bean;而Spring帮我们做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法来完成“依赖注入”,可以把Spring容器理解成一个大型工厂,Bean就是该工厂的产品,工厂(Spirng容器)里能生产出来什么样的产品(Bean)



创建对象之间的协作关系------装配(wiring),也是依赖注入(DI)的本质【装配不是依赖导入,装配是创建对象之间的协作,但是依赖注入的本质是装配,依赖注入:哪里需要这个bean 实例就注入哪里】

在实际的应用中一个对象中经常会关联到其他对象,如果使用传统方法实现这种关联,代码与代码对象与对象之间就会高度耦合,代码的难以复用和测试。
在spring 中对象无需自己去查找和创建与之关联的对象,

spring的自动化专配javabean
自动扫描compoment scanning:spring自动发现上下文中所创建的bean
自动装配autowiring :spring 自动满足bean 之间的依赖

创建Bean 的方法:


1.隐式创建

自动扫描–创建bean

★★★在类上标注@Compoment 表示这是一个组件类,并告知spring 要为这个类创建bean 。但是组建扫描不是默认自动开启的。 bean 实例的ID 是类名首字母小写
@CompomentScan 注解会默认扫描和@CompomentScan 标注的类在一个包下的所有包,当它扫描到带有@Compoment 注解的类就会在spring 自动为其创建一个bean

与SpringBoot 的比较

  1. 以上叙述是为什么项目要在启动类的包下;@SpringBootApplication 注解包含了@CompomentScan

@CompomentScan 所标注的类所属的包叫做基础包,如果我们要设置多个基础包:1.@CompomentScan(basePackage={"package1","package2".......})
2.@CompomentScan(basePackageClass={xx.class,xxx.class}) 这些类所在的包将成为基础包

自动装配–实现bean 之间的协调

注解@Autowired : 传入另一个bean .@Autowired 可以用在类的任何方法上
★★自动装配的前提是:有对应的bean (自动扫描完成)

自动装配会自动寻找匹配的bean 如果没有匹配的bean ;@Autowired 的属性 required 属性=false 就会抛出异常,为了不抛出异常,可以自己手动将required 设置为 true ;如果没有匹配的bean spring 会让这个bean 处于为装配的状态,但是如果在这样配置,代码中有没有空检查就很可能出现NullPointException 异常

2.XML 文件配置(在Spring boot 中这种方式已经被淘汰,所以不做记录)

3.java 代码显示创建Bean

在@Configuration 【配置类中】 使用注解@Bean
★★★@Bean :这个注解告诉spring 这个方法将返回一个对象,要将这个对象注册为spring 应用于上下文的bean ,方法就是产生这个bean 实例的逻辑 bean 的ID是方法名

装配:最佳的方式就是调用产生另一个bean 的方法

关于如何理解spring 所创建的bean ;首先要明确一点:spring创建的bean 和javaBean 是有区别的,不是一个东西。spring相当于是一个工厂,bean 是产品,如何生产产品由我们去定义(在spring中创建bean 的三种方式);一个工厂要想运作,首先他要有产品(bean 在spring 中的核心地位),其次一个工厂的运作需要不同产品(零件之间的配合协调)【装配的重要性】,最后才会有完整的事务效果产生
(以上仅是自己的一点小理解,随着深入的学习何使用应该会有更适合的理解)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/88606531