Spring第二天
Day02
全天内容简介:1.构造方法注入
2.Spring框架的 注解(简化创建对象 和注入的操作)
一、下载Spring源码
在下面的列表中右键下载
注意:如果xml中没有提示 通常关闭一下文件重新打开即可解决该问题
二、构造方法注入
构造方法作用:1.创建对象 2.给属性赋值
构造方法注入需要提供构造方法,构造方法的参数数量和配置文件中注入的参数要保证一直
使用方法:
注意:构造方法的参数数量 一定要和配置文件中的参数数量一致不然会报以下错误
自定义对象类型的属性 赋值和 set注入一致
注意:因为有时候没有导入源码,导致参数名称为 arg0、arg1。。。使原有的参数名称发生了改变,所以使用index更靠谱一些
三、parent 和 abstract标签
parent属性标示 当前实体的父实体是谁 目的是为了延续父类注入的值 ,如果不加parent属性 父类仍然不变,但是父类注入的属性值没有
使用方式:
注意:使用parent属性 父类和子类不能同时使用构造方法注入
Abstract属性如果赋值为true 则Spring容器不会在内存中创建对象
用法:
扩展:两种注入方式 自己进开发时Set方式 更常用一些,Spring框架内部 构造方法注入更多一些
四、自动注入
Spring容器中 自定义对象类型的属性是可以自动注入的
自动属性注入 依赖于set方法
使用方式:
byName执行流程:当创建spring容器对象时加载配置文件,然后加载每一个Bean标签,当发现bean里包含autowire属性并且值为byName时 会 找到bean的Class 遍历所有的set方法, 去掉方法名字里面的set 剩下的内容作为 注入对象的类型
byType执行流程:当创建spring容器对象时加载配置文件,然后加载每一个Bean标签,当发现bean里包含autowire属性并且值为byType时,会找到Bean里面的Class获取Class里面所有的属性,通过属性的类型作为注入对象的类型
全局默认的注入方式:
五、Spring中的注解 通过注解实现自动注入
手动添加约束:
导入约束文件 参考第一天导入流程
3.如果还是不能提示 重新打开xml配置文件
使用方式:
- 在配置文件中打开注解开关
- 在需要自动注入的属性上面添加
执行原理:当创建Spring容器的时候加载配置文件,如果发现开启注解的标签的话, 当创建对象的时候,获取所有的属性,如果属性上面有Autowire注解 则先通过属性名称作为配置文件中bean的id 去列表中找 如果找到 则注入,如果找不到则通过属性的类型 作为依据 进行注入
注意:如果配置文件中存在多个相同的bean ,在通过注解进行自动注入的时候,如果id找不到 类型也会报如下错误
3.Qulifier注解使用:
使用此注解会强制使用注解内部的值作为id去进行匹配
- Resource注解
Resource又叫增强注入的注解,因为Resource注解 自己就能实现出和 Autowire+Qulifier的效果
使用方式和Autowired注解一样 注入流程也是一样
使用方式:
补充说明:如果是单独项目使用Autowire 和Resource效果一样 使用方式也一样,如果在聚合项目中使用Resource则无效 ,因为Autowire哪里都能用所以常用此注解避免出错
七、Spring框架中类的注解
1.开启包扫描: 多个包通过逗号进行分割
也可以包名不写完整的 只写前面一部分,这样会扫描cn.tedu包和子包里的所有内容
2. @Component注解
如果一个类需要Spring容器进行管理 则在此类的声明上面添加Component ,见下图:
添加注解之后当前类就会被Spring容器所管理,当前类的类名首字母小写 作为 容器中所创建对象的id
类注解的实现原理:当加载Spring容器的时候加载了配置文件 如果配置中开启了包扫描,则会到指定的包下面获取所有的Class,如果Class声明的时候添加Component注解 则把此类添加到Spring容器中进行管理,类型即为当前扫描到的类型,id为类名首字母小写,如果在类中的属性出现了Autowire或者Resource说明需要进行属性值的注入 ,注入之后对象就创建成功
八、id的生成策略
NBA NBA
nBA nBA
nBa nBa
NbA nbA
规则取决于第二个字母是大写还是小写,如果是大写首字母不变、如果第二个是小写,则首字母小写
九、高级注解:
1.单例多例的注解 默认值是单例
2.懒加载
- 初始化方法的注解
- 销毁对象的注解
- 程序架构分层的注解
@Repository :pojo包下面的类
@Service:Service包下面的类
@Controller:Servlet
十、属性中基本数据类型的注入 和 复杂类型的注入
1.基本数据类型的注入:通过Value注解进行注入
2.复杂类型的注入
2.1添加约束
2.2Map注入
配置文件中:
代码中注入:
2.3 Set和list注入
配置文件:
代码注入:
十一、properties文件的读取
- 创建文件,把文件放在src的根目录
- 配置文件中进行配置,指向properties文件所在路径
- 通过$在代码中进行注入
十二、手动指定类的id
十三、MVC练习
- 导入jar包 从之前工程中获取即可
- 创建配置文件,也是从之前工程中获取,获取内容多的版本 、清楚beans里面的内容
- 在配置文件中开启包扫描开关 和 注解开关
两天内涉及的所有注解***********重点*********
和类相关的注解:
Component、Controller、Service、Repository :作用是把修饰的类交于Spring容器进行管理
Scope:控制类是单例还是多例
Lazy:控制是否是懒加载
和属性相关的:
Autowired 和Qualified、Resource :用来对自定义对象类型属性的注入
Value:对基本数据类型 和复杂类型进行注入
和方法相关的:
PostConstruct:创建之后执行的方法
PreDestroy:销毁之前执行的方法