目录
注解本质上就是一个类,开发中我们可以使用注解取代xml配置文件。
3.@PostConstruct和@PreDestroy(了解)
1.@RunWith(SpringJUnit4ClassRunner.class)
4.@EnableAspectJAutoProxy:启用aop的开关事务
作用:减少我们编写get和set方法和ToString等
使用方法:
org.projectlombok
lombok
1.18.16
provided
- @Data
- public class Person {
-
- private String name;
- private int age;
-
- }
注:导入后,如果还无法使用,在idea中导入lombok插件
步骤:file->setting->Plugins->Marketplace->搜索lombok安装重启
作用:作用于类,生成无参构造方法
作用:生成该类下全部属性的构造方法。
作用:@Component可以把对象创建出来让spring管理
把dao/service交给spring管理 让spring创建对象
用来告诉spring要创建这个类的对象 相当于xml里面的
用这个注解代替了之前在xml里面的
- class="com.itheima.dao.impl.UserDaoImpl"/>
- <bean id="us" class="com.itheima.dao.impl.UserServiceImpl"/>
spring针对着三层架构,定义出来更符合语义的三个注解:
@Controller : 打在web层 常用
@Service : 打在service层 常用
@Repository : 打在dao层 mybatic后就不能在打了
作用:加了这个注解@Autowired后 就直接可以从spring里面自动拿到对象到service层(使用来注入对象的。)
替代了xml里面的property标签:
特征:
(1) @Autowired 是按照属性的类型去spring的容器里面找对象匹配,如果只有一个对象满足这种类型关系那么就注入该对象!
(2)那么如果在容器当中有多个对象满足这种类型关系,还会拿着属性名当成id名再去匹配一次,如果匹配上了就注入对象。 如果匹配不上,就会报错!
作用:
搭配@Autowired使用,用来告诉@Autowired,要根据指定的id去找对象注入!
不能单独使用!
作用:
等价于 @Autowired + @Qualifier 注解。它是根据指定的id来找对象注入。
总结:@Autowired @Qualifier @Resource 都是用来注入对象的
绝大多数情况下,只要使用@Autowired注解注入即可
作用:
用来注入普通的数据,更多的时候使用来注入properties里面的数据
要记得先导入properties文件
在@Value注解里面使用 ${"properties里面的KEY"}
(1)标记这个类是一个配置类,等价于 applicationContext.xml
(2)@Configuration注解是从 @Component注解 衍生出来的,所以它也会被spring管理起来,创建对象
用来告诉spring要扫描哪个包。代替了.xml里面的
用来导入外部的properties文件
如果在编写文件名称的时候,有背景色,那么可以加上 classpath:
@PropertySource("classpath:db.properties")
用来导入其他的配置类|普通类。
如果我们希望spring也能管理某一个类的对象,除了打上@Component注解之外,还可以使用@Import注解在配置类引入它
使用的是由spring提供的测试环境 , 这份环境的背后会帮助创建工厂对象!
表示这个类是一个切面增强类,它里面的方法都是用来增强别人方法的
提取AOP的通知类表达式
@Before:前置通知
@After:后置通知
@AfterReturning:返回后通知
@AfterThrowing:异常后通知
@Around:环绕通知
设置当前类/接口中所有方法或具体方法开启事务,并指定相关事务属性
@EnableTransactionManagement
开启注解驱动,等同XML格式中的注解驱动
类同于xml中的
- <tx:annotation-driven/>
区别spring里面的@Controller注解和Springmvc里面的@Controller注解
(1)表示这个类是一个控制器,可以处理请求。
(通常出现在web层的普通类上,表示这个类是一个控制器,能够处理请求)
(2)spring会把这个类管理起来, 创建这个类的对象
用于设置方法的映射路径
作用:要求客户端一定要携带指定名字的参数过来
属性:
name|value : 一定要写携带的参数的名字,如果不写,就以形参名为准!,如果写了就以写的为准。
required: 参数是不是一定要带! 默认是true, 如果是false,就表示可以不带!
defaultValue: 默认值,如果不带,就赋默认值给形参。
@RequestParam 可以给每一个参数都加上。
作用1:
1. 用来获取请求体的内容【注意:只有POST请求才有请求体】
2. 得到的内容是: key1=value1&key2=value2...的结构的字符串
3. 一般来说这种就没有什么意义!
作用2: 用来获取客户端提交上来的JSON字符串
要求:
1. 页面确实提交上来的是一份JSON数据
2. 定义一个javabean。类中的属性必须和JSON的属性名字一样
3. 导入jackson-databind 的依赖
3.1 如果不导入会报错: 415 Unsupported Media Type
4. 在方法参数上打上注解 @RequestBody
4.1 如果不打注解,那么所有的属性都是 默认值!
作用:
用于截取请求地址(url)里面的某些部分的数据。这个需要配合RestFul风格来说明
localhost:81/delete?id=3 ==========> localhost:81/delete/3
属性:
value: 用于指定 url 中占位符名称。
required:是否必须提供占位符。
@PathVariable截取地址栏的数据,它需要搭配RestFul的风格才能使用。
1. 在映射地址里面使用 {} 来占位,占位符的名字可以随意写,当然也可以写形参的名字
2. 在形参的前面加上 @PathVariable,即表示要把上面占位符的数据获取到,赋值给方法的形参
2.1 如果value属性不写,那么默认就是按照形参的名字去匹配占位符。
作用:
获取指定名字的请求头数据,赋值给方法参数
(获取指定名称的请求头,赋值给方法的形参)
属性:
value:提供消息头名称
required:是否必须有此消息头 , 默认值是true
不要跳转页面,跳转(字符串)数据 文字说明
用来描述方法的返回值是一个字符串,这个方法一旦被调用,它的返回值将会直接返回给客户端。
@ResponseBody 是可以写在方法上,也可以写在类上,如果标记在类上,即表示对所有的方法都生效!
@ResponseBody和@RequestBody的区别(重点)
客户端传JSON数据给服务端,服务端要把JSON数据接成javabeen对象,这时我们要用@RequestBody注解,就可以把客户端传过来的JSON数据转换成javabeen对象
服务端给客户端返回JSON数据,就要用到@ResponseBody注解
总结 :JSON转换为javabeen 用到的注解是@RequestBody
javabeen转换为JSON 用到的注解是@ResponseBody
用来表示捕捉什么异常,一旦某一个controller方法出现了这种异常那么这个方法将会被调用
表示对所有的controller进行增强,其实背后就是采用了AOP的思想,进行了异常增强
springmvc 针对这两个组合做出来一套 二合一的注解:
@RestController = @Controller + @ResponseBody
同样在异常处理机制里面也有这样的技巧:
@ControllerAdvice + @ResponseBody = @RestControllerAdvice
4.@CookieValue
作用:
用于把指定 cookie 名称的值传入控制器方法参数。
属性:
value:指定 cookie 的名称。
required:是否必须有此 cookie, 默认值是:true
@SpringBootApplication:
1. 表示这个类是一个springboot应用程序的入口类。
2. 要想让程序启动,只需要在main方法里面写上这样的一句话:
SpringApplication.run(当前类的字节码对象, args);
3. 拓展:
3.1 springboot项目启动的时候,默认会扫描启动类所在的位置,以及它后续的所有子包。
3.2 查找到类里面打的注解 @Controller , @Service , @RequestMapping.
3.3 springApplication.run 传递进去当前类的字节码对象,也是可以确定当前这个启动器它的包是哪个!