基于注解的依赖
前言
这是我在看动力节点里王鹤老师的视频时做的一点笔记,可能有些没记住,记错了的情况,请大家海涵.
因为是笔记,所以可能会有人和我一样的笔记,届时可通知我删除,我怂.
基于注解的依赖
通过注解完成java对象的创建 属性赋值
使用注解步骤
1. 加入maven依赖spring-context, 加入此依赖同时,间接加入spring-aop依赖,使用注解必须加入aop依赖
2. 类中加入spring的注解 (多个不同功能的注解)
3. 在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你项目中的位置.
要学习的注解
@component
- 用于创建对象
- 属性 : value 就是对象的名称,也就是 <bean> 的id值,value的值是唯一的.
- @Component(value = "唯一值") 只会创建这一个对象
- @Component(唯一值) 省略value
- @Component() 使用spring的默认名称(类名首字母小写)
@Respotory
用于持久层创建对象,放在dao的实现类上面,表示创建dao对象,dao对象是可以访问数据库的
@Service
用于业务层创建对象,放在service实现类上,创建service对象,service对象是做业务处理的,可以有事务等功能的.
@Controller
用于控制器的上面创建对象,放在控制器,处理器类的上面,创建控制器对象的,控制器对象是能够接收用户提交的参数,显示处理的结果,
上面三个注解用法和Componeng一致,都能创建对象,但是这三个注解还有其他额外功能.(可以给项目对象分层)
@Value 简单类型的赋值
- 属性 :value是String类型的,表示简单类型的属性值
- 位置:
1. 在属性定义之上,无需定义set方法
2. 在set方法之上
- 使用方法
1. @Value(value="张飞")
2. @Value("张飞") 省略value
3. @Value("29")
- 如果接收值是一个int 也要写在双引号中.
@Autowrite 引用类型赋值
- spring使用自动注入原理(byType(默认使用),byName),对引用值赋值.
- spring 默认使用byType 注入
- 属性 : required :
- 默认为true,表示引用类型赋值失败,程序报错,并终止运行
- required=false 表示引用类型赋值失败,程序正常运行,引用类型赋值为null
- 方式:
- byType方式
- 在属性定义之上,无需set方法,推荐使用
直接 @Autowrite 就可 - 在set方法之上
- 在属性定义之上,无需set方法,推荐使用
- byName方式
- 使用@Autowrite
- 使用@Qualifire(“id值”)
前两步没有先后顺序
此时就自动注入成功
- byType方式
@Resource
- 来自jdk中的注解,spring对其提供支持,可以使用它对引用类型赋值
- 使用的也是自动注入原理,支持byName,ByType
- 默认byName,如果byName不行,则使用byType
- 设置只使用byName方法 @Resource(name="id值")
组件扫描器
声明组件扫描器 component-scan ,组件就是java对象
base-package :指定注解在你项目中的包名.
<context:component-scan base-package="包全限定名"/>
工作方式
spring会扫描遍历base-package指定的包,把包中,子包中所有的类,找到类中注解,按照注解的功能创建对象,或给对象赋值.
三种导入多个包的组件扫描器
- 使用逗号 ’ , ’ ,分号 ’ ; ’ 进行分隔
<context:component-scan base-package="包1, 包2"/>
- 多个组件扫描器
<context:component-scan base-package="包1"/>
<context:component-scan base-package="包2"/>
- 一个组件扫描器中只有一个父包,父包中有子包
<context:component-scan base-package="父包"/>
spring会扫描遍历base-package指定的包,此包中,子包中所有的类都会被扫描到.
什么时候使用xml,什么时候使用注释
- xml文件: java代码与值分离彻底 值就是值,代码就是代码.经常改就用xml文件
- 注释: 值还是在java代码在一起的,分离不彻底,但比较快捷,不经常改就用注释.
使用${} 进行占位
- 在xxx.properties文件中指定数据 key=value
- 然后在主配置文件中导入这个包
<context:property-placeholder location="classpath:xxx.properties" />
- 然后在文件中使用#{key} 代替值
ioc 解耦合 :
实现业务对象之间的解耦合,例如 service 和dao对象之间的解耦合