Spring中的那些注解和解释

本文详细介绍了Spring框架中常用的注解,包括@Component、@Repository、@Service、@Controller等,解释了它们的功能和应用场景,以及如何使用@Scope、@Value、@Autowired等注解进行依赖注入和作用域管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Component

描述类型的,代表类型被Spring容器管理,创建对象。容器中bean对象的默认命名是类型的名称,首字母转小写。当前类型的对象是Spring容器管理的一个bean对象组件。

@Repository

描述类型的,代表类型被Spring容器管理,且类型的实例是数据访问层对象。在应用含义上类似继承@Component。
实质上是说,@Repository注解被@Component注解描述,那么被@Repository注解描述的类,相当于同时被@Component注解描述。和@Component的区别在于代码逻辑含义。
在这里插入图片描述

@Service

描述类型,代表类型被Spring容器管理,且类型的实例是服务层对象。继承@Component。
在这里插入图片描述

@Controller

描述类型,代表类型被Spring容器管理,且类型的实例是控制层对象。继承@Component。

@RestController

描述类型,代表类型被Spring容器管理,且类型的实例是控制层对象,其中所有的方法默认被@ResponseBody描述。
在这里插入图片描述

@Scope

描述类和方法的注解,用于定义对象和方法运行过程的作用域。常用赋值包含:
singleton - 相当于默认值,代表单例。在任意的作用域中只有唯一的对象。
prototype - 多例,当通过Spring容器获取bean对象的时候,创建新的对象。
request - 请求作用域,和Spring web框架配合使用。框架是对servlet的一个封装,可以和spring web框架耦合,实现每个请求创建一个对象。
session - 会话作用域,和Spring web框架配合使用。实现一个用户会话对应一个对象。
通常应用在类型上,如:数据对象,一般都会使用@Scope(“prototype”)描述。保证数据的线程安全。

@Value

一般用于描述类型的属性和方法。描述属性代表为属性赋值。描述的方法一般都是setter方法,代表通过setter方法为属性赋值。是为简单类型做赋值的,包含:八种基本类型,对应包装类型,String,Date,Resource(是资源,如spring配置文件中配置mybatis的mapper映射文件的时候,是使用classpath:xxx/xxx.xml,这个value字符串就会封装为Resource类型的对象。),Class。
如: @Value(" s t r " ) S t r i n g s t r ; @ V a l u e ( " {str}") String str; @Value(" str")Stringstr;@Value("{str}") public void setStr(String str){}
@Value一般都和properties配置文件、placeHolder连用。代表通过placeHolder读取解析properties配置文件内容,通过命名的方式获取properties配置文件数据。
注意:placeHolder读取解析的properties配置内容只在当前的容器中有效。在控制器中要通过@Value实现属性注入,那么必须在springmvc配置文件中加载。在service、repository中通过@Value实现属性注入,那么必须在spring配置文件中加载。

@Autowired

一般用于描述属性和方法的,为属性赋值的。是为复杂数据类型做赋值的。通常是引用Spring容器中的其他bean对象。@Autowired默认使用byType类型注入。如果同类型bean对象有多个,byName定位;如果byName无法定位唯一的bean对象,抛出异常。如:


class B{
@Autowired
private A a;
}

@Qualifier

配合@Autowired实现byName属性注入。定义方式为:
@Autowired
@Qualifier(“beanName”)
private Object obj;

@Resource

javax.annotation包中的注解,是用于描述属性注入的注解。可以byName和byType注入。不推荐使用,尤其是在Spring环境中不推荐使用。和javax.annotation耦合。

@RequestMapping

是SpringMVC中描述类或方法的注解,描述类型的时候,代表类型中所有的方法处理的请求路径前缀是什么。描述方法的时候,代表方法处理的请求路径是什么。
如:路径为/user/test请求由TestController.test方法处理。
@RequestMapping("/user")
class TestController{
@RequestMapping("/test")
public String test(){ return “test”; }
}
常用属性:
String[] produces - 约束响应头。 如:produces= {“application/json;charset=UTF-8”} 代表本次请求处理后,响应头设置为application/json,且字符集为UTF-8。一般和@ResponseBody配合使用。

String[] value - 定义请求路径地址。 value={"/a", “/b”, “/c”} value="/path"

String[] params - 约束请求中的参数。如:params={“username”, “password”} 代表请求中必须包含请求参数username和password。 如: params={“username=admin”, “password”} 代表请求中必须包含请求参数username和password,且username参数的值必须是admin。
RequestMethod[] method - 约束方法处理的请求方式。如:method = {RequestMethod.GET} 代表方法只处理GET请求。

@GetMapping

描述方法的,相当于被@RequestMapping( method = {RequestMethod.GET} )描述。只能处理GET请求方式的请求。常用属性和@RequestMapping一致。

@PostMapping

描述方法的,相当于被@RequestMapping( method = {RequestMethod.POST} )描述。只能处理POST请求方式的请求。常用属性和@RequestMapping一致。
14@RequestParam
描述方法参数的注解,代表方法参数和请求参数的对应关系。可配置的属性包括:name、required、defaultValue。 name - 代表对应的请求参数命名是什么;required - 代表对应的请求参数是否是必要的(默认为true,必须传递);defaultValue - 代表如果请求中不包含这个请求参数,默认值是多少。注意:defaultValue的有效范围,是请求中不包含这个参数,不是没有这个参数的值。 如:http://ip:port/test?id=1&name=。 请求参数有id和name,name的值是空字符串,这个时候@RequestParam(name=“name”, defaultValue=“user”)中的defaultValue无效。不推荐通过@RequestMapping中的params属性约束请求参数。建议使用@RequestParam约束请求参数。

@ResponseBody

可以描述类和方法,描述类型,代表当前类型中的所有方法的返回值都通过响应输出流向客户端输出;描述方法,代表当前方法的返回值通过响应输出流向客户端输出。
特征:如果方法的返回值类型不是字符串,则自动设置响应头为:application/json;charset=UTF-8;如果方法的返回值类型是字符串,则响应头类为:text/plain;charset=ISO-8859-1
如下述请求,默认的响应头不是application/json,且字符集是ISO-8859-1,如果需要设置响应头,则可以通过@RequestMapping(value="/test", produces = {“application/json; charset=UTF-8”})设置:
@RequestMapping("/test")
@ResponseBody
public String test(){ return “{“message”:“abc”}” ; }

@RequestBody

描述方法参数的注解。如果请求方式为POST,请求参数通过请求体传递,且请求参数不是name-value paire,而是一个JSON对象的时候,使用。可以将JSON对象解析为Java对象。注意:@RequestBody只能处理一个请求参数,且请求参数是一个对象。

@PathVariable

是描述方法参数的注解。处理RESTFul参数的注解。如:请求地址:/user/1
方法:
@RequestMapping("/user/{id}")
public String test( @PathVariable(“id”) Integer id ){}
上述环境是将请求地址中的{id}部分解析为Integer数据,并赋值给方法参数id。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值