Spring第二天

Day02

全天内容简介:1.构造方法注入

2.Spring框架的 注解(简化创建对象 和注入的操作)

一、下载Spring源码

https://repo.spring.io

在下面的列表中右键下载

注意:如果xml中没有提示 通常关闭一下文件重新打开即可解决该问题

二、构造方法注入

构造方法作用:1.创建对象  2.给属性赋值

构造方法注入需要提供构造方法,构造方法的参数数量和配置文件中注入的参数要保证一直

使用方法:

 

 

注意:构造方法的参数数量 一定要和配置文件中的参数数量一致不然会报以下错误

 

自定义对象类型的属性 赋值和 set注入一致

 

注意:因为有时候没有导入源码,导致参数名称为 arg0arg1。。。使原有的参数名称发生了改变,所以使用index更靠谱一些

 

三、parent abstract标签

 

parent属性标示 当前实体的父实体是谁  目的是为了延续父类注入的值 ,如果不加parent属性 父类仍然不变,但是父类注入的属性值没有

使用方式:

 

 

注意:使用parent属性 父类和子类不能同时使用构造方法注入

 

Abstract属性如果赋值为true Spring容器不会在内存中创建对象

用法:

 

 

扩展:两种注入方式 自己进开发时Set方式 更常用一些,Spring框架内部 构造方法注入更多一些

 

四、自动注入

Spring容器中 自定义对象类型的属性是可以自动注入的

自动属性注入 依赖于set方法

 

使用方式:

 

byName执行流程:当创建spring容器对象时加载配置文件,然后加载每一个Bean标签,当发现bean里包含autowire属性并且值为byName时 会 找到beanClass 遍历所有的set方法, 去掉方法名字里面的set 剩下的内容作为 注入对象的类型

byType执行流程:当创建spring容器对象时加载配置文件,然后加载每一个Bean标签,当发现bean里包含autowire属性并且值为byType时,会找到Bean里面的Class获取Class里面所有的属性,通过属性的类型作为注入对象的类型

全局默认的注入方式:

 

 

五、Spring中的注解 通过注解实现自动注入

手动添加约束:

导入约束文件 参考第一天导入流程

3.如果还是不能提示 重新打开xml配置文件

六、@AutoWired 

使用方式:

  1. 在配置文件中打开注解开关

 

  1. 在需要自动注入的属性上面添加

 

执行原理:当创建Spring容器的时候加载配置文件,如果发现开启注解的标签的话, 当创建对象的时候,获取所有的属性,如果属性上面有Autowire注解 则先通过属性名称作为配置文件中beanid 去列表中找 如果找到 则注入,如果找不到则通过属性的类型 作为依据 进行注入

注意:如果配置文件中存在多个相同的bean ,在通过注解进行自动注入的时候,如果id找不到 类型也会报如下错误

3.Qulifier注解使用:

使用此注解会强制使用注解内部的值作为id去进行匹配

 

 

 

  1. 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.懒加载

 

  1. 初始化方法的注解
  1. 销毁对象的注解

 

  1. 程序架构分层的注解

@Repository pojo包下面的类

@ServiceService包下面的类

@ControllerServlet

十、属性中基本数据类型的注入 复杂类型的注入

1.基本数据类型的注入:通过Value注解进行注入

2.复杂类型的注入

2.1添加约束

2.2Map注入

配置文件中:

代码中注入:

2.3 Setlist注入

 

配置文件:

 

代码注入:

 

 

十一、properties文件的读取

  1. 创建文件,把文件放在src的根目录

 

  1. 配置文件中进行配置,指向properties文件所在路径

 

  1. 通过$在代码中进行注入

十二、手动指定类的id

十三、MVC练习

  1. 导入jar包 从之前工程中获取即可
  2. 创建配置文件,也是从之前工程中获取,获取内容多的版本 、清楚beans里面的内容
  3. 在配置文件中开启包扫描开关 注解开关

两天内涉及的所有注解***********重点*********

和类相关的注解:

ComponentControllerServiceRepository :作用是把修饰的类交于Spring容器进行管理

Scope:控制类是单例还是多例

Lazy:控制是否是懒加载

和属性相关的:

Autowired QualifiedResource  :用来对自定义对象类型属性的注入

Value:对基本数据类型 和复杂类型进行注入   

和方法相关的:

PostConstruct:创建之后执行的方法

PreDestroy:销毁之前执行的方法

原文地址:https://www.cnblogs.com/dxp5201/p/8921750.html