亲兄弟篇: 一文掌握 Spring Boot 常用注解,保姆级整理,建议收藏!-CSDN博客
一、启动注解(Spring Boot 应用的入口注解)@SpringBootApplication
@SpringBootApplication
是一个注解,它是 Spring Boot 应用的入口注解,用于表示一个应用程序的主类。这个注解通常被放置在包含 main()
方法的类上。@SpringBootApplication
是一个组合注解,整合了以下三个注解的功能:
1.1 @
SpringBootConfiguration:
标记该类是一个配置类,其中可能包含用 @Bean
注解标记的方法,用于定义 Bean 对象。
1.2 @
EnableAutoConfiguration:
通过启用 Spring Boot 的自动配置机制,根据项目的依赖和配置信息来自动配置应用程序。
1.3 @ComponentScan
:
扫描指定包及其子包下的组件(包括 @Component
、@Service
、@Repository
等注解标记的类),将它们注册为 Spring 的组件。
这个组合注解简化了 Spring Boot 应用的配置,可以减少开发者的工作量。通常情况下,我们将 @SpringBootApplication
注解放置在项目的主类上。
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@SpringBootApplication详细可参考------> @SpringBootApplication详解_Maiko Star的博客-CSDN博客
二、配置文件相关注解
2.1 @Configuration:
@Configuration
是 Spring Framework 中的一个注解,用于标记一个类为配置类。配置类是一种特殊的类,它用于定义 Bean 对象以及其他配置信息。
在使用 @Configuration
注解标记的类中,我们可以使用 @Bean
注解来定义方法,这些方法会在 Spring 容器初始化时被调用,并且返回一个对象作为 Bean。
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}
在上述示例中,AppConfig
类被标记为配置类,使用 @Bean
注解定义了一个方法 userService()
,该方法将返回一个 UserService
对象作为 Bean。Spring 容器在初始化时将会调用 userService()
方法并将其返回的对象注册为一个 Bean,可以在其他地方进行依赖注入。
除了 @Bean
注解,@Configuration
类中还可以使用其他 Spring 注解,例如 @Value
、@Autowired
等,以实现更复杂的配置和依赖注入逻辑。
关于@Configuration的更多内容参考 -----> 底层注解-@Configuration详解 & @Configuration(proxyBeanMethods = true/false)_Maiko Star的博客-CSDN博客
2.2 @ComponentScan
@ComponentScan
是 Spring Framework 中的一个注解,用于指定需要被 Spring 扫描并加入到应用上下文的组件。该注解可以用在配置类上或者作为单独的注解使用。
当 @ComponentScan
注解用在配置类上时,它会告诉 Spring 在指定的包及其子包下扫描注解标记的类,并将它们注册为 Spring 的组件(如 @Component
、@Service
、@Repository
等)。
@Configuration
@ComponentScan("com.example")
public class AppConfig {
// 配置类的其他内容...
}
上述示例中,@ComponentScan
注解指定了扫描的包路径为 “com.example”,Spring 将会在该包及其子包下扫描并注册所有标记为组件的类。
三、注入bean相关注解
3.1 @Bean
@Bean
是 Spring Framework 中的一个注解,用于告诉 Spring 容器将被注解标记的方法的返回值作为一个 Bean 注册到容器中。
通常情况下,我们需要在 Spring 容器中创建和管理对象。通过 @Bean
注解,我们可以自定义方法来返回或创建这些对象,并将它们注册为 Spring 的 Bean,使得它们可以在其他地方进行依赖注入、使用和管理。
示例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}
在上述示例中,@Bean
注解标记了 userService()
方法,该方法返回一个 UserService
对象。当 Spring 容器初始化时,会调用 userService()
方法,并将其返回的对象注册为一个 Bean。这样,在其他需要使用 UserService
的地方,可以通过依赖注入的方式获取该 Bean 的实例,并使用它提供的服务。
除了简单的方法返回对象,@Bean
注解还支持更复杂的配置:
- 可以通过
name
属性指定 Bean 的名称,例如@Bean(name = "myBean")
。 - 可以通过
initMethod
属性指定在实例化 Bean 之后调用的初始化方法,例如@Bean(initMethod = "init")
。 - 可以通过
destroyMethod
属性指定在销毁 Bean 之前调用的销毁方法,例如@Bean(destroyMethod = "cleanup")
。 - 可以通过
@Scope
注解指定 Bean 的作用域,如单例(@Scope("singleton")
)、原型(@Scope("prototype")
)等。
3.2 @Component、@Repository、@Service、@Controller
3.2.1 @Component
@Component
是最基本的注解,用于将一个普通的类标记为 Spring 的组件。它是其他三个注解的父注解。通常用于标记一般性的业务逻辑类。
@Component
public class UserService {
// 类的实现...
}
3.2.2 @Repository
@Repository
用于标记数据访问对象(DAO),通常用于与数据库交互的类。它是对 @Component
的特化,用于提供更具体的语义。
@Repository
public class UserRepositoryDao {
// 数据访问的实现...
}
3.2.3 @Service
@Service
用于标记服务类,通常用于业务逻辑的处理和组装。它是对 @Component
的特化,提供了更具体的语义。
@Service
public class UserService {
// 服务类的实现...
}
3.2.4 @Controller
@Controller
用于标记控制器类,通常用于 Web 应用程序中处理用户请求和返回响应。它是对 @Component
的特化,用于提供更具体的语义。
@Controller
public class UserController {
// 控制器类的实现...
}
这些注解的作用类似,都是用来将类标记为 Spring 组件,使其被 Spring 容器扫描和管理。使用它们的好处是可以使代码更加清晰和易读,并在代码层面表示出组件的角色和职责。在使用时,根据类的具体功能和用途选择合适的注解来标记类。同时,这些注解也可以与其他注解结合使用,实现更复杂的功能和特性。
3.3 @Scope
-
@Scope在和@Component注解一起修饰在类上,作为类级别注解时,@Scope表示该类实例的范围
-
在和@Bean一起修饰在方法上,作为方法级别注解时,@Scope表示该方法返回的实例的范围。
常见的作用域范围包括:
singleton
(默认):单例作用域,每个容器中只存在一个共享的 Bean 实例。prototype
:原型作用域,每次请求/获取 Bean 时都会创建一个新的实例。request
:请求作用域,每次 HTTP 请求都会创建一个新的 Bean 实例。session
:会话作用域,每个用户会话都会创建一个新的 Bean 实例。application
:应用作用域,整个应用程序生命周期内只有一个 Bean 实例。websocket
:WebSocket 作用域,每个 WebSocket 连接都会创建一个新的 Bean 实例。
@Component
@Scope("prototype")
public class MyService {
// 类的实现...
}
在上述示例中,MyService
类被标记为一个组件,并使用 @Scope("prototype")
注解将该组件的作用域设置为原型模式,每次通过容器获取 MyService
的实例时都会创建一个新的对象。
3.4 @Autowired
通过 @Autowired
注解,我们可以自动将 Spring 容器中匹配类型的 Bean 注入到目标对象中,避免了手动处理依赖对象的创建和管理,提高了代码的可维护性和可测试性。
四、SpringMVC相关注解
4.1 @RestController 复合注解
@RestController
是一个复合注解,它是在 Spring Framework中对 @Controller
和 @ResponseBody
进行了整合的注解。@Controller
注解用于标记类为控制器,表示该类是一个处理用户请求的控制器。而 @ResponseBody
注解用于标记方法返回的结果作为响应体返回给客户端。
@RestController
注解默认将方法返回的对象转换为 JSON 或 XML 格式,并作为响应体返回给客户端。
4.2 @RequestMapping
@RequestMapping
是 Spring Framework 中的一个注解,用于映射请求的 URL 路径到控制器类或方法上。
通过 @RequestMapping
注解,我们可以定义控制器类或方法处理的请求 URL,以及与之关联的 HTTP 请求方法、请求参数、请求头等条件。
@RequestMapping
注解可以应用于类级别和方法级别。
在类级别上,@RequestMapping
注解用于定义控制器类处理的根路径。
4.3 @RequestBody
通过 @RequestBody
注解,我们可以将请求体中的数据自动绑定到控制器方法的参数上,从而方便地获取请求中发送的数据。数据绑定的方式通常是根据请求体的内容类型(如 JSON、XML 等)进行自动转换,并将转换后的对象作为方法的参数传入。
注解实现接收http请求体的内容类型(如 JSON、XML 等),将json数据转换为java对象
4.4 @ResponseBody
@ResponseBody
是 Spring Framework 中的一个注解,用于将方法的返回值直接作为响应体返回给客户端。
通过 @ResponseBody
注解,我们可以在控制器方法中将方法的返回值转换为合适的格式(如 JSON、XML 等),并将其作为响应体返回给客户端。
将返回对象转化为合适的格式(如 JSON、XML 等)响应给客户端
4.5 @RequestParam
@RequestParam 是 Spring Framework 中的一个注解,用于从请求参数中获取值并绑定到方法参数上。
通过 @RequestParam 注解,我们可以将请求中的参数值自动绑定到控制器方法的参数上,方便地获取请求中传递的参数值。
@RequestParam 注解可以应用于方法参数上。
示例:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello(@RequestParam("name") String name) {
return "Hello, " + name + "!";
}
// ...
}
在上述示例中,hello() 方法的参数 name 被标注了 @RequestParam(“name”) 注解,表示从请求参数中获取名为 “name” 的值,并将其绑定到 name 参数上。
@RequestParam 注解还支持一些属性,如 required、defaultValue 等:
- required:指定参数是否是必需的,默认为 true。如果设置为 true,但请求中没有对应的参数值,会抛出异常;如果设置为 false,但请求中没有对应的参数值,方法参数会被赋予 null。
- defaultValue:指定参数的默认值。如果请求中没有该参数,会使用 defaultValue 指定的值。
4.6 @PathVariable
通过 @PathVariable
注解,我们可以在控制器方法中提取 URL 路径中的变量,并将其值绑定到方法参数上,以便进一步处理。
@PathVariable
注解可以应用于方法参数上。
示例:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable("id") Long userId) {
// 根据用户 ID 查询用户信息
// ...
}
// ...
}
在上述示例中,getUser()
方法使用了 @PathVariable
注解,参数 userId
将会自动绑定到路径中的 id
变量上。例如,当请求的 URL 为 /api/users/123
时,userId
的值将被设置为 123
。
@PathVariable
注解还支持一些属性,如 required
:
required
:指定该路径变量是否是必需的,默认为true
。如果设置为true
,但请求的 URL 中不包含对应的路径变量,会抛出异常;如果设置为false
,但请求的 URL 中不包含对应的路径变量,方法参数会被赋予null
。
4.7 @RequestHeader
通过 @RequestHeader
注解,我们可以在控制器方法中提取请求头中的特定字段值,并将其绑定到方法参数上,以便进一步处理。
@RequestHeader
注解可以应用于方法参数上。
示例:
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/hello")
public String hello(@RequestHeader("User-Agent") String userAgent) {
return "Hello! Your User-Agent is: " + userAgent;
}
// ...
}
在上述示例中,hello()
方法使用了 @RequestHeader
注解,参数 userAgent
将会自动绑定到请求头中的 User-Agent
字段的值上。
五、导入相关注解
5.1 @ImportResource导入配置文件注解
通过 @ImportResource
注解,我们可以在使用纯注解驱动的 Spring 应用程序中,引入传统的基于 XML 的配置文件。
@ImportResource
注解可以应用于配置类上。
示例:
@Configuration
@ImportResource("classpath:applicationContext.xml")
public class AppConfig {
// 配置类的相关代码
}
在上述示例中,@ImportResource
注解引入了名为 applicationContext.xml
的配置文件,该配置文件位于类路径下。
可以导入单个或多个 XML 配置文件,多个文件之间用逗号分隔。
示例:
@Configuration
@ImportResource({"classpath:applicationContext.xml", "classpath:otherContext.xml"})
public class AppConfig {
// 配置类的相关代码
}
5.2 @Import导入组件注解
通过 @Import
注解,我们可以将其他的 Java 类或配置类导入到当前的配置类中,以便让 Spring 容器识别并管理这些组件。
@Import
注解可以应用于配置类上。
示例:
@Configuration
@Import({BeanA.class, BeanB.class})
public class AppConfig {
// 配置类的相关代码
}
在上述示例中,@Import
注解引入了 BeanA
类和 BeanB
类,这两个类会被纳入到当前的配置类 AppConfig
所管理的 Spring 容器中。
可以导入单个或多个组件类,多个类之间用逗号分隔。
除了导入普通的组件类,@Import
注解还支持导入其他的配置类。
示例:
@Configuration
@Import({BeanA.class, BeanB.class, AnotherConfig.class})
public class AppConfig {
// 配置类的相关代码
}
在上述示例中,@Import
注解除了导入 BeanA
类和 BeanB
类外,还导入了另一个配置类 AnotherConfig
。这样,AppConfig
所管理的 Spring 容器中既有 BeanA
和 BeanB
组件,同时也会应用 AnotherConfig
所包含的配置信息。
通过 @Import
注解导入的组件会与当前的配置类一起被纳入到 Spring 容器中,并进行相应的管理和使用。
5.3 @PropertySource注解
引入单个properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties"})
引入多个properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})