一、注解的概念,使用场景,有哪些分类
注解是用来说明程序中某些元素的特性、行为,以及对编译器执行工作的指示的标记。注解可以被用来提供元数据,可以在编译、运行时被处理,也可以在代码分析、代码生成等时期起作用。
使用场景(包括但不限于):
-
标记过期元素:使用 @Deprecated 注解可以标记某个方法、类、接口等已经不建议使用,以便开发者知道在后续版本中它们可能会被删除。
-
标记代码的作者/版本信息:使用 @Author 和 @Version 注解可以方便地描述代码的作者和版本信息。
-
生成代码文档: 使用 @document 来标记注释和方法是常用的生成文档的方式。使用 JavaDoc 工具加上一些特殊的注解可以生成你的项目中的 Java 代码的 API 文档。
-
运行时动态代理:使用 Java 动态代理,必须要有一个接收代理对象的 InvocationHandler 接口实例,并在实现接口实例的时候使用了 @代理注解 来声明该类需要被 JDK 代理。
-
代替配置文件功能:可以减少xml文件的配置。
-
使用注解作为权限设置:如shiro中有5个权限注解,也可以自定义注解进行权限控制。
分类:
-
元注解:元注解就是注解的注解,可以用来定义一个注解的基础属性(如:给自定义注解上加注解),如:@Target、@Retention、@Documented 等。
-
基本注解(内置注解):Java 本身自带的注解,如:@Override、@Deprecated、@SuppressWarnings。
-
自定义注解:自定义的注解,能够满足一些特定的业务需求或者框架设计需求。如:@Service、@Repository、@Controller 等。
二、SpringBoot 常用注解
1、@RestController
@RestController的作用等同于@Controller + @ResponseBody。而@Controller注解的作用是通过在一个类上添加@Controller注解,表明了这个类是一个控制器类,并且还需要在该类中添加注解@RequestMapping;而@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。所以@RestController注解的作用大致就是将被注解的类设置为一个控制类,是用于spring boot项目中创建controller类所需要的,且一般要与@RequestMapping(后面会讲到)联用,且支持快捷的返回一个JSON对象。然后@RestController的使用方法和代码如下:
@RestController
@RequestMapping("/checkgroup") //映射到带有参数“checkgroup”的页面
public class CheckGroupController { //表明这个类是一个控制类
XXXXX5
}
2、@RequestMapping
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,简单来说,就是在页面上标有此映射的功能和参数都会直接传到被映射的函数里面执行。且它的属性和对应的作用如以下所示:
- value:用于指定请求的 URL。它和 path 属性的作用是一样的。
- method:用于指定请求的方式。
- params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和 配置的一模一样。
且如果是用于方法上,则是请求 URL 的第二级访问目录,在使用的时候需要以/开头。 它出现的目的是为了使我们的 URL 可以按照模块化管理。
举个例子,将@RequestMapping注解分别注释在类和方法上,所以在前端写链接的时候要写完全的路径(类上标签的路径+方法标签上的路劲)
3、@Component 和 @Configuration
@Configuration
和 @Component
是 Spring 框架中两个注解,它们在功能使用上有一些区别。
@Configuration
注解表示一个类是配置类(Configuration Class),用于定义 Spring Bean 的配置。通常,配置类会包含被@Bean
注解修饰的方法,这些方法将生成和配置实例化的 Spring Bean。配置类还可以通过@ComponentScan
注解来自动扫描并注册其他的 Spring Bean。配置类的主要目的是将应用程序所需的 Bean 进行组织、配置和管理。而@Component
注解是用于标识一个类为 Spring 管理的组件(Component),让 Spring 自动扫描并将其注册为一个 Bean。@Component
注解是其他专用注解(如@Controller
、@Service
、@Repository
等)的通用元注解,@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。它们都是基于@Component
注解派生而来的。通过使用@Component
注解,可以使 Spring 自动发现和创建这些被注解的类,并将其纳入到 Spring 容器中进行管理。
因此,@Configuration
注解用于定义配置类,支持方法级别的 Bean 配置,主要用于管理 Bean 的创建和配置。而 @Component
注解则是一个通用的组件标识注解,用于将类标记为 Spring 管理的组件,并在 Spring 容器中进行注册管理。
4、@Resource 和 @Autowired
- @Autowired 是根据 type 来匹配,@Resource 可以根据 name 和 type 来匹配, 默认是name 匹配。
- @Autowired 是 Spring 定义的注解,@Resource 是 JSR 250 规范里面定义的注 解,而Spring 对 JSR 250 规范提供了支持。
- @Autowired 如果需要支持 name 匹配,就需要配合@Primary 或者@Qualifier来实现。
@Configuration
public class SpringConfiguration{
@Bean("hello1")
public HelloService hellol{
return new HelloService0;
}
@Bean("hello2")
public HelloService hello20{
return new HelloService0;
@Service
public class UserService{
@Autowired
@Qualifier("hello2")
private HelloService helloService;
}