什么是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 {
@Autowired
private 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 {
@Autowired
private BookService bookService;
}
直接在类的属性上加上@Autowired即可,此时我们就可以拿到service层的bookService对象。
(2)构造方法注入
如代码:
java
public class UserController2 {
//注⼊⽅法2: 构造⽅法
private UserService userService;
@Autowired
public UserController2(UserService userService) {
this.userService = userService;
}
}
直接在构造方法上加上@Autowired即可。
(3)Set方法注入
如代码:
java
public class UserController3 {
//注⼊⽅法3: Setter⽅法注⼊
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
}
直接在set方法上加上@Autowired即可。
一定要注意,只有将对象交给Spring管理,才可以对对象进行依赖注入。