# 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中可以使用带泛型的父类类型来确定这个子类的类型