常用注解
@AutoWired 下面用的是接口 ,按照类型注入
@Date 用在实体类上,作用是 可以不用写 getter与setter方法
@Mapper 用的dao层,在dao层加入此注解,可以在方法上直接进行sql语句的编写,用@Select(""),@Delete(""),@update(""),@insert("") 这四个进行编写
@Component 和三个伴生注解
这四个注解都是用于修饰类的,适用于把当前类创建一个对象,存入Spring 的ioc容器中。
----@Controller,@Service,@Repository,针对业务层,服务层的实现层,实体层
@Service 用在 服务层的实现类上,用来表明 这是服务bean
@Configuration 用于表示当前类是spring的一个配置类,用来代替spring中的applicationContext.xml,用于编写配置的类
@ComponentScan 用户创建容器时要扫描的包,在扫描位置时,可以制定包名,也可以指定类,
同时支持定义扫描规则,比如可以 包含进去哪些,排除掉哪些
@Bean 作用在方法上,表示把当前方法的返回值存入spring 的ioc容器。同时还可以出现在注解上,作为元注解来使用
@Import 导入注解,可以导入 普通类,带有@Configuration的配置类,ImportSelector方式导入的类,通过 ImportBeanDefinitionRegistrar 方式导入的类。
该注解作用在类上,一般和注解驱动配置类一起使用
@Primary 用于 制定bean的注入优先级,被@Primary修饰的bean对象优先注入
@Responsebody 注解表示该方法返回的结果直接写入HTTP相应中去,,一般在异步获取数据时使用,只能返回String,Object,Json等实体对象,不能条撞到模版页面,在方法的形参中去使用这个注释时,controller的路径注解必须使用@PostMapping(),它就是用来接收http的post请求的
@RequestParam 将请求参数和控制方法的形参创建关系,一共有三个属性,value:设置是否必须传输请求参数名,与name等价。required:设置是否必须传输请求参数 ,用来接收url?后面的参数,可以为多个
@RequestMapping 返回值通常解析为跳转路径
@RequestBody 将http请求正文 插入到 方法中,从页面中拿到的内容放到代码中
@RestController (@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。)
Controller类中的方法返回值,默认是JSON对象,也就是相当于@Controller里面的方法上添加了注意:@Controller和@RestController的区别主要有以下几点: @RestController相当于@Controller和@ResponseBody合在一起的作用;
如果使用@RestController注解Controller层的话,则返回的是return里面的内容,无法返回到指定的页面,配置的视图解析器InternalResourceViewResolver也就自然没有作用了;
如果要返回到指定的页面,则需要用@Controller配合视图解析器InternalResourceViewResolver;
如果需要返回JSON、XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
@GetMapping() 用来作用在类上,处理get请求 ,括号中可以加传的参数值,一般是id,例如
@GetMapping("/{id}"),用于查询,用于传递多个值时,用@GetMapping("/{id}/{name}")
@PostMapping 处理post请求 用于 添加
@DeleteMapping 用来处理delete请求,用于删除
@PutMapping 用来处理put请求 一般用来修改,
------@Patchmapping 是对put方式的一种补充,put是对整体进行更新,patch是对局部进行更新。
@PreAuthorize 用在方法上,在执行方法前,进行权限验证,支持Spring EL表达式,但是只有在
@EnableGlobalMethodSecurity(prePostEnabled=true)的时候,@PreAuthorize才可以使用,
@PathVariable 只支持一个属性 value,类型是String,代表绑定的属性名称,用来拿,url中的动态参数
@JsonInclude(JsonInclude.Include.NON_NULL) :在实体类上使用,就是前端要数据时,返回一个对象,但是只要用户名和密码,然后其他的为空,这时候可以使用此注解,就是空不过去了,不为空的数据可以过去
@MapperScan(basePackages={"写到包名,不用写到类名"}),这个是用来springboot创建项目的时候,配置mapper文件的
@Qualifier("XXX") qualifier的作用是排除掉不匹配的Bean,qualifier 是限制,是约束,是把范围变小,而不是什么"按名字去查找"之类的,单独使用 qualifier 没有一点作用。大致是这样,首先你先根据某些条件找到了若干Bean,然后由于指定了qualifier 所以根据 qualifier 排除掉一些Bean,现在还剩下若干Bean。(至于怎么处理剩下的若干 Bean,和 qualifier 无关了)
Bean 如何符合 qualifier 限制呢?
目标bean上有这个注解
@Async() @Async一般注解在方法上,用于实现方法的异步:方法调用者立即返回,待调用的方法提交给Spring的线程池执行。@Async也可以注解在类上,等价于在类中的所有方法上添加该注解。需要注意@Async只对Spring管理的对象生效。
Spring AMQP框架注解
@RabbitListener
是Spring AMQP框架中的一个注解,用于在Spring应用程序中声明消息监听器。该注解可以应用在方法级别上,并且需要指定要监听的队列或者队列的名称。当消息到达队列时,Spring AMQP将自动调用被@RabbitListener
注解的方法,并将消息内容作为参数传递进来。
配置类注解
@configurationProperties:只要在 Bean (类)上添加上了这个注解,指定好配置文件的前缀,那么对应的配置文件数据就会自动填充到 Bean 中。
使用这个注解要加入Maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
如果是Gradle依赖
使用 Gradle,应在配置中声明依赖项annotationProcessor,如以下示例所示:
dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
如果您使用additional-spring-configuration-metadata.json文件,compileJava则应将任务配置为依赖于该processResources任务,如以下示例所示:
compileJava.inputs.files(processResources)
此依赖性确保注释处理器在编译期间运行时附加元数据可用。
@value: 将配置文件中的键对应的值 分配给其带注解的属性。 外部的值动态注入到 Bean 中,在 @Value 注解中,可以使${} 与 #{}
@Value("${}"):可以获取对应属性文件中定义的属性值。 @Value("#{}"):表示 SpEl表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。
详情@Value()的使用,请移步
元注解:
@Retention应用到一个注解上用于说明该注解的生命周期,取值如下:
1、RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译阶段进行编译时它将被丢弃忽视。
2、RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到JVM中,“默认方式”。
3、RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到JVM中,所以在程序运行时可以获取到它们。
@Documented 用于指定被该注解将被javadoc工具提取文档。
@Target 用于指定被修饰的注解能用于哪些元素的修饰
@Inherited修饰的注解在父类中使用,假设子类没有使用任何注解将继承父类的注解