spring中的@Autowired到底是什么

一、 何意味?

  • @Autowired的作用是:从Spring容器中获取一个对象,也可以理解为Spring分配给当前一个对象
  • 这里不懂的话,初学者可以理解为spring帮我们new了一个对象
    二、层层递进
  • 在controller层中使用
java 复制代码
@RestController
public class UserController{
	@AutoWired
	private UserService uservice;
}

意思是:

Controller需要一个Service

所以让Spring分配一个Service对象

  • 在ServiceImpl里使用
java 复制代码
@Servcice
public class UserServiceImpl implements UserService{
	@Autowired
	privateUserMapper userMapper;
}

意思是:

Service需要Mapper

所以让Spring分配一个Mapper对象

→ 这时候大家就在想了,这好像没区别啊,这个反而我还看不懂直接手动new一个多好

→ 区别在这里:

  1. 低耦合(扩展会提到)
  2. 重点:生命周期管理
  • 传统的new 每次调用,例调用100次User user = new User()就是创建100个对象
  • 而对于@Autowired只是创建一个对象反复使用
    tips可以理解为多例和单例的区别
  1. 就是测试、缓存、日志之类的更加便利

三、扩展

  1. IOC(控制反转)
    最好理解的就是使用了@Autowired将控制权从程序员自己给了spring 这个就叫控制反转
  2. DI(依赖注入)
    说白了就是没有DI前吃饭要考虑的是饭、菜、餐具等等一系列,有了DI之后就直接开吃
    这里的关键是依赖注入 注入的是接口即不用管具体是什么实现的只与起接口类的抽象方法相依赖。
  3. 耦合
    说白了高耦合就是A改了B也需要改,低耦合就是A改了B不需要改或者只需要改很小一部分
    低耦合也是@Autowired的特点

@Autowired依赖于接口类而不是实现类

例如:需要将mysql更换到oracle那么只需要直接将oracle对应的实现类直接继承原来mysql的对应接口就行(可以用@Primary注解强调优先使用,也可以直接去掉原来mysql对应的实现类的接口继承)

(下述例子只是展示了部分,@Autowired的注解在其对应的controller层添加)

java 复制代码
public class UserService {
    private UserRepository repo = new MysqlUserRepository();  // 这里要改
}

public class OrderService {
    private UserRepository repo = new MysqlUserRepository();  // 这里要改
}

public class ProductService {
    private UserRepository repo = new MysqlUserRepository();  // 这里要改
}

public class CartService {
    private UserRepository repo = new MysqlUserRepository();  // 这里要改
}

修改方式:

java 复制代码
// 1. 加一个新的 Oracle 实现,需要将MysqlUserRepository中的继承接口给去掉
@Repository
public class OracleUserRepository implements UserRepository {
    // Oracle 的实现
}

// 2. 告诉 Spring 用哪个
@Repository
@Primary  // 优先用我
public class OracleUserRepository implements UserRepository { }
相关推荐
我是人✓1 分钟前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡9 分钟前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
CCblandy26 分钟前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
IT研究室30 分钟前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项33 分钟前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog34 分钟前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼1 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠1 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y1 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究1 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology