JDK自带注解
@Override
在java中如果方法上加@Override的注解的话,表示子类重写了父类的方法。当然也可以不写,写的好处是:
- 可读性提高
- 编译器会校验写的方法在父类中是否存在
元注解
@Target
表示注解可用在哪里:类上、方法上、属性上等等
@Retention
注解的生命周期:源文件中、字节码文件中、运行中
SOURCE 在源文件中有效(即源文件保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 在运行时有效(即运行时保留)
框架注解
@SpringBootApplication
放置在Springboot启动类上,表明该类是开启Springboot容器的入口,它是一个复合注解。里面包含了包扫描,自动注入,配置注入的功能。
@ComponentScan
1、@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。
我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。
注:所有SpringBoot的启动类最好是放在root package下,因为默认不指定basePackages。
2、@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。
例如,如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。
3、参数的作用
basePackageClasses:对basepackages()指定扫描注释组件包类型安全的替代。
excludeFilters:指定不适合组件扫描的类型。
includeFilters:指定哪些类型有资格用于组件扫描。
lazyInit:指定是否应注册扫描的beans为lazy初始化。
nameGenerator:用于在Spring容器中的检测到的组件命名。
resourcePattern:控制可用于组件检测的类文件。
scopedProxy:指出代理是否应该对检测元件产生,在使用过程中会在代理风格时尚的范围是必要的。
scopeResolver:用于解决检测到的组件的范围。
useDefaultFilters:指示是否自动检测类的注释
@EnableAutoConfiguration
@EnableAutoConfiguration 简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。
@EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。
@EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。
而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器,仅此而已!
@EnableAutoConfiguration作为一个复合Annotation。
@SpringBootConfiguration
@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,
并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
@Inherited
关于java中元注解Inherited 的使用说明
首先解释下元注解,就是用来中声明注解类型时需要使用到的注解。
Inherited作用是,使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,子类会自动继承此注解,否则的话,子类不会继承此注解。这里一定要记住,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效。
@RestController
相当于@Controller+@ResponseBody,接受客户端请求,并作出响应
- 用户发起请求时,第一步经过前端控制器,
- 但是前端控制器 只负责请求的转发和响应.不做任何业务处理.将请求转发给处理器映射器.
- 处理器映射器接收到前端控制器的请求之后,查询自己维护的服务列表信息.
如果服务列表中没有这个URL的key. 该程序不能处理用户的请求,则返回特定数据,前端控制器接收之后响应用户404.
如果服务列表中有该URL key 则说明请求可以正常执行. 将该方法的对象返回给前端控制器. - 前端控制器将返回的方法进行接收,但是由于前端控制器只负责转发和响应,不能直接执行该方法.所以交给处理器适配器执行.
- 处理器适配器根据方法的类型(xml配置文件/注解/其他方法),处理器适配器在自己的处理器库中挑选一个最为合适的处理器去执行该方
法. 当处理器执行该方法时标识业务开始. 将最终的处理的结果通过ModelAndView对象进行包裹,返回给前端控制器.
ModelAndView: Model: 代表服务器返回的业务数据 View: 服务器端返回的页面的名称 - 视图解析器 将View中的数据进行解析 拼接一个完整的页面路径 前缀/hello后缀
- 视图渲染: 将数据与页面进行绑定. 这样用户就可以在页面中看到具体的数据.
由于现在流行前后端分离. 所以SpringMVC省略了视图解析和视图渲染.只有前5步. 核心注解: @ResponseBody 省略6-7步
@Controller,@Service,@Component
将标志类创建的实例教给spring容器管理
@ResponseBody
将返回的对象转化为JSON串
@RequestBody
将接收的JSON串转化为对象,一般在后端接收axios的put和post请求发送的参数时使用
@RequestMapping("/helloworld")
规定了浏览器访问控制层方法的方式,一般用在类上边,作为该类统一的入口
@GetMapping,@DeleteMapping,@PostMapping,@PutMapping
与@RequestMapping不同的是,上边四种注解规定了具体的请求方式,一般用在方法上
@PathVariable
加在参数前,用来获取RESTful请求方式中占位符{}中的值
@RequestParam
参数名和请求参数名称不同时使用,可以设置默认值
@CrossOrigin
跨域的解决方案之一,适用于单体架构
以下四个注解需要下载lombok插件
@Data
自动生成以下方法
get set toString hashCode equals
@NoArgsConstructor
无参构造
@AllArgsConstructor
全参构造
@Accessors(chain = true)
链式编程
@Autowired
依赖注入,用于描述两个类的关系
- 属性注入(最常用的方式)
1.1. 通过 setter 方法注入Bean 的属性值或依赖的对象
1.2. 使用元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节 点指定属性值
<bean id="p1" class="com.chai.lesson2.Person" scope="prototype">
<constructor-arg value="小李" index="0"></constructor-arg>
<constructor-arg value="18"></constructor-arg>
</bean>
<bean id="p2" class="com.chai.lesson2.Person">
<constructor-arg value="jack" index="0"></constructor-arg>
<constructor-arg type="int">
<value>14</value>
</constructor-arg>
</bean>
Tip:
value:表示你要注入的属性的值
index 表示参数下标
type 指定类型
scope 属性(表示bean的作用域) 可以通过执行springIOC容器来创建对象 的类型
prototype 原型模式(多例模式) 每次调用IOC容器的getBean方法,就会返回一个新的对象(地址)
singleton 单例模式 每次调用都会返回同一个对象
3. 工厂方法注入(很少使用,不推荐)
4. 泛型依赖注入(了解)
@MapperScan(“cn.tedu.dao”)
扫描DAO接口文件所在的包,value值为DAO接口所在的包名的全路径
如果不配置的话会报如下错误:
@Qualifier(“helloServiceImplA”)
设置依赖注入的两种方式
1.按照类型注入
按照属性的类型 去Map集合中查找是否有改类型的对象. 如果有则注入.
2.按照名称注入 根据属性的name 去Map集合中查找对应的KEY
@PropertySource(value = “classpath:/person.properties”, encoding = “utf8”)
让Spring加载该pro文件,指定字符编码为utf8
@Value("${server.port}")
可以从配置文件获取,也可以从配置中心获取
- 从Spring容器内部为属性赋值
- spel表达式(spring的el表达式) ${key}
@Mapper
Mybatis为接口创建代理对象,JDK动态代理对象,Spring容器管理
@SpringBootTest
说明:该注解是SpringBoot程序为了简化后端代码测试,提供了专门的测试AP
@DateTimeFormat(pattern = “yyyy-MM-dd”)
在实体类的日期中所添加的注解,不加默认认为是字符串,不是Date类型
@RestControllerAdvice
定义全局异常的处理类,返回值是一个JSON串
@ExceptionHandler
表示拦截的异常的类型,如果类型匹配,则执行异常方法
@Transactional
事务控制,增删改,用于业务层
属性1: rollbackFor 可以配置特殊的异常类型.遇到某种异常回滚.
属性2: noRollbackFor 可以配置异常类型 遇到某种异常不回滚.
@Configuration
表示这是一个配置类,目的:封装对象,交给Spring容器管理
底层产生一个代理对象
@Bean
描述的是一个方法,将方法的返回值对象,交给Spring容器管理
可以放在@Configuration或者@Component修饰的类里边