不要到处都用@Autowired啦

相信大部分人项目只要用了spring框架,肯定到处都是@Autowired。
注意: spring4.3以后就可以省略@Autowired了,全部更新内容: 地址;其中跟新内容如下
在这里插入图片描述
这是什么意思呢,翻译过来“如果目标bean只定义一个构造函数,则不再需要指定@autowired注释。”;我们平时开发中的bean大部分都不写构造函数,系统默认一个无参构造函数,这就符合这一条件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019101816003785.png
此时helloService已经注入了,但是有些人会说以前加个@Autowired就行了,现在还要加个构造方法,更麻烦了,这时可以使用lombok插件,类上加@AllArgsConstructor就行了。
在这里插入图片描述
如果你们系统因为某种原因不让用Lombok插件,那就继续老老实实用@Autowired,假装没看过这篇文章😏。

在Spring框架中,当多个请求同时访问同一个Controller接口的方法时,Spring通过其内置的线程安全机制来保证程序不会发生错乱。具体来说,Spring的Controller默认是单例模式(Singleton),这意味着在整个应用程序上下文中只会有一个Controller实例。 为了确保线程安全,Spring建议在Controller中不要使用可变的实例变量。如果确实需要使用可变变量,可以通过以下几种方式来实现线程安全: 1. **使用`@Scope("prototype")`注解**:将Controller的作用域设置为原型模式,每次请求都会创建一个新的实例,从而避免线程安全问题。 2. **使用`@RequestScope`注解**:将Bean的作用域设置为请求作用域,每次请求都会创建一个新的实例。 3. **使用线程安全的集合或对象**:如果必须使用可变变量,可以使用线程安全的集合或对象,如`ConcurrentHashMap`、`AtomicInteger`等。 在`@RestController`或`@Controller`中声明的service接口通常是通过`@Autowired`注解注入的,默认情况下,这些service也是单例模式(Singleton)。Spring通过依赖注入(Dependency Injection)来管理这些service的实例,并确保它们是线程安全的。 以下是一个示例: ```java @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/myEndpoint") public String handleRequest() { return myService.performAction(); } } @Service public class MyService { // 假设这个方法是线程安全的 public String performAction() { // 业务逻辑 return "Action performed"; } } ``` 在这个示例中,`MyController`和`MyService`都是单例模式。`MyService`中的方法`performAction`假设是线程安全的。如果`performAction`中使用了可变变量,需要确保这些变量的线程安全性。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值