开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
获取Bean对象(对象装配)
这里可能听了有点迷,啥玩意对象装配,其实就是获取对象! 我们将对象注册到
Spring容器下,我们要读取将对象取出放入到某个类中,这就是对象装配,也叫对象注入!
实现对象装配的3种方法
- 属性注入
- 构造方法注入
- Setter注入
下面我们来演示一下这3种注入方式
我们按照实际开发将Service层的类注入到Controller层的类中!
属性注入
我们通过@Autowired实现属性注入
service层类代码
@Service
public class UserService {
public User getUser(){
return new User("Mysql",666);
}
}
controller层类代码
通过属性注入将service层代码注入到这
@Controller
public class UserController {
//属性注入
@Autowired
private UserService userService;
public User getUser(){
return userService.getUser();
}
}
运行结果:
构造方法注入
我们还是通过@Autowired注解注入
@Controller
public class UserController {
private UserService userService;
//构造方法注入
@Autowired
public UserController(UserService userService){
this.userService = userService;
}
public User getUser(){
return userService.getUser();
}
}
Setter注入
@Controller
public class UserController {
//Setter注入
private UserService userService;
@Autowired
public void setUserService(UserService userService){
this.userService = userService;
}
public User getUser(){
return userService.getUser();
}
}
三种注入方式对比
- 属性注入简洁,使用方便! 缺点只能适用于IoC容器,在非IoC容器不适用,并且属性注入只有在是使用的时候才会出现空指针异常(NPE)
- 构造方法注入现在官方推荐注入方式! 缺点 如果注入多个对象,就会使得代码臃肿,不过这就是程序员的问题了,不符合程序设计的单一职责的设计模式,优点通用性强,在使用前一定可以保证注入的类不为空!
- Setter方式是Spring前期推荐的注入方式,通用性不如构造方法注入,现在已经认准构造方法注入!