4.spinrgboot常用注解

本文深入探讨了Spring框架中的关键注解,如@Autowired、@Component、@Controller、@Transactional等,详细解释了它们的功能、使用场景及注意事项,是理解和运用Spring框架不可或缺的指南。

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

1.@Autowired 自动装配注释

作用:实现自动装配,使用范围:用在成员变量、方法以及构造函数上。
用在类属性上,可以免写setter方法

@Resource和@Autowired的区别:
@Resource:

@Resource(name=”pd”) 
private PersonDao p; 

这时候spring注入p的过程是

1:先查找xml中是否有id为p的元素

2:如果没有找到,则看是否有name属性(@Resourcename=“”),有则查找name

3:否则查找PersonDao类型的元素

@Autowired:

@Autowired
private PersonDao p;

他会去xml文件里查找类型为PersonDao的元素

2.@Component 用于标识该类为bean

对于Spring,在XML文件中启动Spring的自动扫描功能后,目录下的带有此注解的类都会自动创建bean,这样就不再需要在 XML 中显式使用 <bean/>进行Bean 的配置。
对于Springboot,由于不用配置XML,所以此注解成为了标注bean的重要手段。
除了@Component以外,还有几个注解,都可以用来标识bean,并且这些注解都有特别的含义,当组件不好归类的时候,我们可以使用@Component进行标注。

3. @Controller和@RestController的区别?

@RestController注解相当于@ResponseBody+ @Controller合在一起的作用。

1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return里的内容。
例如:本来应该到success.jsp页面的,则其显示success.

2)如果需要返回到指定页面,则需要用@Controller配合视图解析器InternalResourceViewResolver才行。

3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

说明

@Controller,方法返回String,实际上是返回stringcontent.jsp,并且把model中的内容赋值到jsp中。如果在项目中,找不到该jsp,就会报错。

@RestController,方法返回String,就真的是返回String,这个String一般是json内容,前端获取到这些内容后,解析到当前页面上(前端打开一个页面,使用ajax异步加载),从而实现前后端的完全分离。

4.@Transactional 事务注解

在这里插入图片描述
此注解需要注意的地方:
在这里插入图片描述

5.@RequestMapping 用于映射url

1.RequestMapping(value=”/view”,method=RequestMethod.GET,params=”add”):
主要用于方法注解,用于定义该方法接收哪个路径以及类型,必须包含什么参数
Value可以写集合,例如@RequestMapping(value={”/view”,“/hello”})

6.@GetMapping和@PostMapping

1、@GetMapping(value =“/say”)等价于@RequestMapping(value=”/say”,method= RequestMethod.GET)

2、 @PostMapping(value= “/say”)等价于@RequestMapping(value=”/say”,method= RequestMethod.POST)

7.@ModuleAttribute

用于方法的参数中,标识该参数(entity)是用来承接request的同名参数。

8.@SpringBootApplication

Springboot专有注解,用于标注该类为项目的启动类,入口类。

9.@Aspect 表示该类是AOP类

要想把一个类变成切面类,需要两步,

①在类上使用 @Component 注解把切面类加入到IOC容器中

②在类上使用 @Aspect 注解使之成为切面类

10.@Pointcut

用于方法层面的注解,方法返回类型必须为void,用于标注切入点。下面提到的注解,其value值=@Pointcut指定的方法,即可将切面方法与切入点关联。

execution匹配方法执行的连接点

within 限定匹配特定类型的连接点

this匹配特定链接点的bean引用是指定类型的实例的限制

target 限定匹配特点链接点的目标对象参数是指定类型的实例

args 限定匹配特点链接点的参数是给定类型的实例。

下面的方法都有一个参数,value = “methodName()”,methodName方法必须有@Pointcut注解。从而实现关联。

11.@Before 前置增强

表示该切面是在方法执行前处理

12.@After 最终增强

表示该切面是在方法执行后处理

13.@AfterReturning 后置增强

返回之后处理,可以用来记录返回内容

14. @Configuration 用于定义配置类

@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

15.@Bean

@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。Bean有很多属性,例如name,id,class,initMethod,destoryMethod等。

16.@Scope 定义@Bean的作用域

用于定义@Bean的作用域。默认是singleton写法@Scope("prototype")

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例。

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效。

session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效。

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效。

17.@Param

在dao层中使用,作用是为了传递多个参数,解决的是可读性和直观性

List<BldDto> selectBy(@Param("cinemaId") Integer cinemaId,
                                        @Param("bldDate") LocalDate bldDate,
                                        @Param("organizationId") Integer organizationId,
                                        @Param("tenantId") Integer tenantId);

18.@RequestParam

在Controller层中使用,作用是为获取前端参数,解决的是前后端参数不一致的问题

@GetMapping("/getRateList")
public Result getFilmRateList(@RequestParam(name = "organizationId",required = false) Integer organizationId,
								@RequestParam(name = "cinemaId",required = false) Integer cinemaId,
								@RequestParam(name = "planId",required = true) String planId) {
    return Result.success(bldService.getRateList(organizationId,cinemaId,planId));
}

19.@RequestHeader

在Controller层中使用,作用是获取请求信息的header部分绑定到方法的参数上

@RequestHeader("suId") Integer organizationId

20.@DateTimeFormat

获取一个符合自定义格式的时间格式存储到数据库,前后到后台的时间格式的转换

@DateTimeFormat(pattern = Constant.DEFFAULT_DATE_FORMAT) LocalDate bIbDate

21.@Validated

在Controller层中使用,用来对数据进行校验

@PostMapping("/cinemaTime/save")
public Result saveCinemaTime(@RequestBody @Validated OpenTimeInputDto cinemaOpenTimeDto) {
    bldBuilderService.saveCinemaOpenTime(cinemaOpenTimeDto);
    return Result.success();
}

然后在实体类中进行详细的校验:

public class User {   
    //在分组addUser时,验证id不能为空,其他情况下不做验证
    @NotEmpty(groups={addUser.class})
    private String id;
    @NotEmpty(message = "用户名不能为空")
    private String username;
    @Size(min=6 ,max= 20 ,message = "密码最少6位,最高20位")
    private String password;
   ......
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值