当前位置: 首页 > news >正文

Spring IOC 和 DI 详解(面试常考)

什么是Spring IOC 和 DI 呢?


IOC呢,其实就是Spring提供的一种机制,他是一个容器,可以用来存储对象。从而实现控制反转。而DI是依赖的注入,可以把对象从Spring中注入进来,通过@Autowired注解。

控制反转:以ioc为例子,我们在写java项目的时候,创建对象需要自己手动new()一个出来,这是的控制权在你自己手里,而通过注解的方式,使对象交给Spring管理,此时呢这种就是控制反转。

那有什么好处呢?

在写项目的时候,我们可以避免大量创建对象的操作,直接用注解的方式交给Spring管理,再通过注解将对象取出。使项目管理更加的方便。


IOC的五大注解


(1)@Controller


@Controller注解呢,故名思意,其实就是字面的含义,他主要是用来将,Controller层的对象交给Spring管理。

如代码:

@RequestMapping("/book")
@RestController
public class BookController {@RequestMapping("/getListByPage")public Result<PageResult<BookInfo>> getListByPage(RequestPage requestPage , HttpSession session){log.info("requestPage接收到的参数 : {} ," , requestPage);//参数校验,用户是否登入.UserInfo userInfo = (UserInfo)session.getAttribute(Constants.USER_SESSION_KEY);if(userInfo == null){return Result.nologin();}PageResult<BookInfo> result = bookService.getLsitByPage(requestPage);return Result.success(result);}
}

如上图所表示的,这里我们是使用了,@RestController这样一个注解,其实这个注解包括了@Controller注解,这里我们就可以把controller层的对象交给Spring管理。


(2)@Service

这里的@Service注解也是,在service层使用的注。

如代码:

@Service
public class BookService {@Autowiredprivate BookMapper bookMapper;public Integer addBook(BookInfo bookInfo) {return bookMapper.intsertBook(bookInfo);}
}

这里呢,我们直接使用@Service注解直接将对象交给Spring管理。


(3)@Repository,@Component,@Configuration

上面三个注解,用法都和前面两个一样。

1)@Repository用于仓库存储。

2)@Component用于组件存储。

3)@Configuration用于配置存储。

这里呢@Component 是⼀个元注解,也就是说可以注解其他类注解,如 @Controller ,@Service @Repository 等。这些注解被称为 @Component 的衍生注解。


DI


关于依赖注入,Spring也给我们提供了三种方式:

1. 属性注入。

2. 构造方法注入。

3. Setter方法注入。


(1)属性注入

如代码:

public class BookController {@Autowiredprivate BookService bookService;
}

直接在类的属性上加上@Autowired即可,此时我们就可以拿到service层的bookService对象。


(2)构造方法注入

如代码:

public class UserController2 {//注⼊⽅法2: 构造⽅法 private UserService userService;@Autowiredpublic UserController2(UserService userService) {this.userService = userService;}
}

直接在构造方法上加上@Autowired即可。


(3)Set方法注入

如代码:

public class UserController3 {//注⼊⽅法3: Setter⽅法注⼊ private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}
}

直接在set方法上加上@Autowired即可。


一定要注意,只有将对象交给Spring管理,才可以对对象进行依赖注入。


http://www.mrgr.cn/news/9450.html

相关文章:

  • UE管理内容 —— FBX Asset Metadata Pipeline
  • Qt+FFmpeg开发视频播放器笔记(二):界面UI搭建
  • postman接口测试
  • ArcMap教程(01):制作人口专题图
  • 双系统ubuntu引导项丢失如何修复
  • HCL AppScan Standard 10.6.0 发布,新增功能概览
  • 什么是聚类?简单描述如下的聚类方法:划分方法,层次方法,基于密度的方法,基于模型的方法。为每类方法给出例子。
  • docker 镜像加速器 实测可用
  • 【Hot100】LeetCode—23. 合并 K 个升序链表
  • C++ QT 单例模式
  • leetcode73. 矩阵置零,简单模拟
  • springboot service如何动态读取外部配置文件
  • 【小程序】小程序的eventBus
  • 状态压缩DP---最短Hamilton路径
  • [Day 63] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 【Remi Pi开发环境搭建】主要包括虚拟机的创建以及开发板镜像的烧录
  • 6G网络的关键技术、应用前景与挑战并存的科技征途
  • Maven-08.依赖管理-生命周期
  • STM32(七):定时器——输入捕获
  • 异常处理 || 抛出 || 捕获 || noexcept || 异常类