# spring_b1
**Repository Path**: li_knight/spring_b1
## Basic Information
- **Project Name**: spring_b1
- **Description**: 学习日志:注解和Filter
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-19
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring_b1
## 介绍
学习日志:注解和Filter
## 内容
#### 注解
@Controller:控制器,给控制器层组件;
@Service:业务逻辑层的组件添加
@Repository:给数据库层(持久化层,dao层)
@Component:组件
spring底层不会验证你是哪个层的组件,推荐各自曾加个自层的注解
使用注解快速将组件加入到ioc容器中
1.加入注解
2.告诉spring自动扫描加了注解的组件:
:指定扫描的基础包,把基础包及他下面所有包的加了注解的类,自动扫描到IOC容器中
3 一定到导入AOP包
默认的名字为小写首字母的类名,默认为单实例
使用@Scope注解来调整单、多实例
注意:基础包里面的无法使用注解,引入基础包时使用bean,自己的包可以使用注解(注解和bean相结合)
#### 扫描包时要包含的类
默认扫描是全都要,指定扫描要那些
首先要禁用默认规则
打开:use-default-filters="false"
#### 扫描包时不包含的类
扫描的时候排除一些不要的组件
type:指定排除规则
annotation:注解,标注指定注解的组件不要;expression="":注解的全类名
aspectj:aspectj表达式,没人用
custom:自定义那些要不要,自己写代码那些使用
regex:还可以写正则表达式
assignable:指定排除某个具体类;expression="":指定类的全类名
#### Autowired注解
spring会自动的为这个属性赋值;一定是去容器中找到这个属性对应的组件。
@Autowired注解原理
private BookService bookService;
先按照类型在容器中找到相应的组件:bookService=ioc.getBean(BookService.class);
1)、找到一个就自动赋值
2)、没找到,抛出异常
3)、有多个?装配上?
变量名作为id继续匹配(看默认名)
1.)匹配上:装配
2.)没有匹配上
原因:因为我们按照变量名作为id继续匹配的
使用@Qualifier(“bookService”)指定一个id进行匹配
使用@AUtower标注的自动装配的属性默认是一定要装配上的,找不到就装配null
装配null:@Autowired(required = false)
方法上有@Autowired:
这个方法在bean创建的时候自动运行
这个方法上的每一个参数都会自动注入值
#### @Autowired 和 @Resource 和 @Inject
都是自动装配
@Autowired:最强大,spring的
@Resource:j2ee,java标准
@Inject:EJB
@Autowired和@Resource区别:@Resource扩展性强,如果切换为另外一个框架也是可以使用的。
#### spring的单元测试
1、导包test包
2、@ContextConfiguration(locations = "")指定spring配置文件位置
3、@RunWith()指定用那种驱动进行单元测试,@RunWith(SpringJUnit4ClassRunner.class)
4、junit包版本要在4.12之上
#### 泛型依赖注入
spring 4.0 之后的功能
继承:子类继承父类里的属性可以自动注入,父类不需要注入要容器中
spring中可以使用带泛型的父类类型来确定这个子类的类型