SpringBoot中常用的注解及作用

SpringBoot的@SpringBootApplication注解用于启动应用,包含自动配置和组件扫描。@EnableAutoConfiguration自动配置基于添加的组件jar。@ComponentScan扫描并注册组件。@Controller和@RequestMapping用于处理HTTP请求。@RestController用于返回JSON格式响应。@Autowired自动装配依赖。@Configuration定义配置类。@Value注入配置属性。
摘要由CSDN通过智能技术生成

SpringBoot中的注解

@SpringBootApplication:

用于识别主类,它会触发自动配置和组件扫描, 它是一个复合型注解,包含@SpringBootConfiguration:标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名,返回值就是类型。让我再也不注册文件,只需要在配置类上面加上注解,在方法名上加上@Bean,就可以自动注册

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@EnableAutoConfiguration:

是自动配置的注解,这个注解会根据我们添加的组件jar来完成一些默认配置,我们做微服务时会添加spring-boot-starter-web这个组件jar的pom依赖,这样配置会默认配置springmvc和Tomcat

//@EnableAutoConfiguration注解通常与@SpringBootApplication注解一起使用。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@ComponentScan:

扫描当前包下的子包被
@ComponentScan注解通常与其他注解一起使用,比如@Configuration注解。@Configuration注解表示这是一个配置类,@ComponentScan注解告诉Spring框架在配置类中进行组件扫描和注册。

@Component: 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Controller: 用于标识一个是控制层组件
@Service : 用于标识一个类是服务层组件
@Repository: 用于标识一个是数据访问层组件
注解标记的类并纳入到spring容器中进行管理。等价于< context:component >

@Configuration
@ComponentScan(basePackages = "com.example")    //包的基础路径
public class AppConfig {
    // 配置其他Bean
}

@RequestMapping:

用于映射一个HTTP请求到处理器方法(Controller方法上)

@RequestMapping可以应用于级别或方法级别,分别用于指定类中所有处理器方法的共同请求路径前缀,以及针对单个处理器方法的具体请求路径。

//类级别的@RequestMapping:可以将@RequestMapping应用于整个Controller类,
//用于指定该类中所有处理器方法的共同请求路径前缀

@Controller
@RequestMapping("/user")
public class UserController {
    // 类中的其他处理器方法
}
//@RequestMapping(“/user”)指定了UserController类中所有处理器方法的请求路径前缀为"/user",
//即每个处理器方法的请求路径都会以"/user"开头
//方法级别的@RequestMapping:可以将@RequestMapping应用于单个处理器方法,
//用于指定该方法可以处理的具体请求路径。

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/info")
    public String getUserInfo() {
        // 方法的具体实现
    }
}

//@RequestMapping(“/info”)指定了getUserInfo方法可以处理的请求路径为"/user/info",
//即当收到"/user/info"的HTTP请求时,会调用getUserInfo方法进行处理。

@RequestMapping注解还提供了一些属性来进一步配置请求映射的细节:

method:指定处理的HTTP请求方法,如GETPOST等。
params:指定请求中的参数条件,如"paramName=paramValue"。
headers:指定请求的Header条件,如"Content-Type=application/json"。
consumes:指定请求的Content-Type条件,如"application/json"。
produces:指定返回的Content-Type类型,如"application/json"
@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/info", method = RequestMethod.GET, 
                    params = "userId=1", headers = "token")
    public String getUserInfo() {
        // 方法的具体实现
    }
}

//@RequestMapping指定了getUserInfo方法可以处理的请求路径为"/user/info",
//处理的请求方法为GET,请求中必须包含名为"userId"且值为"1"的参数,
//并且Header中必须包含名为"token"的参数。

@RestController:

表示该类中的所有方法返回JSON格式 @Controller+@ResponseBody
用于声明一个控制器类,并将处理器方法的返回值直接作为HTTP响应体返回给客户端。

@RestController注解的作用相当于将所有处理器方法的@ResponseBody注解都省略掉,即默认所有方法的返回值直接作为响应体返回给客户端。

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/user")
    public User getUser() {
        User user = new User("John", "Doe");
        return user;
    }
}
//@RestController注解声明了一个控制器类,所有方法的返回值都会自动转换为相应的JSON格式,并作为HTTP响应体返回给客户端。
//@GetMapping注解指定了getUser方法的请求路径为"/api/user",当收到该路径的GET请求时,getUser方法会被调用,并返回一个User对象。

通过@RestController注解,我们可以方便地创建一个RESTful风格的控制器,以处理HTTP请求并返回相应的数据给客户端

@Autowired:

用于自动装配依赖,Spring会根据类型进行自动分配,通过在字段、构造方法或方法参数上使用@Autowired注解,可以实现依赖对象的自动注入。

//1.字段注入
@Autowired
private Dependency dependency;
//@Autowired注解用于字段上,表示将依赖的对象自动注入到dependency字段中。
//Spring框架会根据该字段的类型在容器中查找匹配的依赖对象,并进行自动注入。

//2.构造方法注
private Dependency dependency;

@Autowired
public MyClass(Dependency dependency) {
    this.dependency = dependency;
}
//@Autowired注解用于构造方法参数上,表示通过自动注入的方式将依赖的对象传入到构造方法中。
//Spring框架会根据构造方法参数的类型在容器中查找匹配的依赖对象,并进行自动注入。


//3.方法参数注入
@Autowired
public void setDependency(Dependency dependency) {
    this.dependency = dependency;
}
//@Autowired注解用于方法参数上,表示将依赖的对象自动注入到setDependency方法的参数中。
//Spring框架会根据方法参数的类型在容器中查找匹配的依赖对象,并进行自动注入。


//4.如果容器中存在多个匹配的依赖对象,
//可以结合@Qualifier注解使用,指定要注入的具体实例。
@Autowired
@Qualifier("specificDependency")
private Dependency dependency;

//使用@Qualifier注解指定了要注入的具体实例的名称为"specificDependency"。

@Configuration:

用于标识一个类是通用组件,可以被其他组件自动装配,等同于spring的XML配置文件

@Configuration注解可以与其他注解一起使用,如@Bean、@ComponentScan、@Import等,以定义和管理应用程序中的各种Bean。
使用@Configuration注解的类通常具有以下特点
1.包含一个或多个使用@Bean注解的方法,用于定义和配置Bean。
2.可以通过自动注入或直接使用@Bean方法返回的对象来进行依赖注入,从而实现Bean之间的协作。
3.可以通过使用其他配置类的@Import注解导入其他配置类,以实现配置的组合和模块化。

@Configuration注解的作用是告诉Spring容器这个类是一个配置类,Spring会根据该类中的配置信息来创建和管理Bean。
通过@Configuration配置类可以灵活地定义和管理应用程序的组件,便于测试、扩展和维护。

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}
//@Configuration注解标识了一个配置类AppConfig。
//通过@ComponentScan注解,指定了扫描的包路径,以便自动扫描和注册指定包下的组件。

//@Bean注解用于标注myBean方法,该方法返回一个MyBean类型的对象。
//Spring容器会根据该方法的定义,创建一个名为"myBean"的Bean,并将其纳入到容器管理之中。

//@Configuration注解的作用是告诉Spring框架,这个类是一个配置类,
//其中包含了一些用于创建和配置Bean的方法。
//当启动应用程序时,Spring容器会扫描并解析这些配置类,
//根据配置类中的定义创建和管理相应的Bean,并提供依赖注入和其他的Spring特性。

@Value:

用于注入配置的属性值,注入指定字段

//@value注解可以应用于以下位置
//1.字段注入
@Value("${my.property}")
private String myProperty;

//@Value注解用于字段上,表示将配置文件中名为"my.property"的属性值注入到myProperty字段中。


//2.构造方法参数注入
private String myProperty;

@Autowired
public MyClass(@Value("${my.property}") String myProperty) {
    this.myProperty = myProperty;
}

//@Value注解用于构造方法参数上,表示将配置文件中名为"my.property"的属性值注入到构造方法的myProperty参数中。

//3.方法注入
@Autowired
public void myMethod(@Value("${my.property}") String myProperty) {
    // 方法体
}

//@Value注解用于方法参数上,表示将配置文件中名为"my.property"的属性值注入到myMethod方法的myProperty参数中。

//@Value注解可以直接指定一个值,SpEl表达式或者通过占位符获取配置属性

一个小问题?
@Autowired 和 @Resource 有什么区别?

  1. @Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象
    必须存在,如果允许null值,可以设置它的required 属性为false,如 @Autowired(required=false),如果要使用名称装配的话可以搭配@Qualifier
    2.@Resource (这个注解是属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配,但要注意,如果name属性一旦指定,就会按照名称进行装配。

共同点:都是用来装配bean的,都可以写在字段上或者写在setter方法上

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值