【Spring】获取Bean对象需要哪些注解
阿华代码,不是逆风,就是我疯
你们的点赞收藏是我前进最大的动力!!
希望本文内容能够帮助到你!!
目录
一:@Service(服务存储)
1:存储bean的代码
2:读取bean的代码
3:运行结果
二:@Repository(仓库存储)
1:存储bean的代码
2:读取bean的代码
3:运行结果
三:@Component(组件存储)
1:存储bean的代码
2:读取bean的代码
3:运行结果
编辑
四:@Configuration(配置存储)
1:存储bean的代码
2:读取bean的代码
3:运行结果
五:为什么需要这些不同的注解
1:注解的特点
(1)元注解@Component:
(2)源码分析
2:注解分类的优点
3:调用流程
引入:在上一篇文章中,我简单的认识了IoC容器和DI依赖注入,控制反转的基本原理,使用@Controller存储bean对象,以及三种获取bean对象的方式。本篇文章,将继续对bean对象的存储五大注解进行展开
一:@Service(服务存储)
1:存储bean的代码
@Service
public class UserService {
public void sayHi(String name) {
System.out.println("Hi," + name);
}
}
2:读取bean的代码
@SpringBootApplication
public class SpringIocDemoApplication {
public static void main(String[] args) {
//获取Spring上下⽂对象
ApplicationContext context =
SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring中获取UserService对象
UserService userService = context.getBean(UserService.class);
//使⽤对象
userService.sayHi();
}
}
3:运行结果
二:@Repository(仓库存储)
1:存储bean的代码
@Repository
public class UserRepository {
public void sayHi() {
System.out.println("Hi, UserRepository~");
}
}
2:读取bean的代码
@SpringBootApplication
public class SpringIocDemoApplication {
public static void main(String[] args) {
//获取Spring上下⽂对象
ApplicationContext context =
SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
UserRepository userRepository = context.getBean(UserRepository.class);
//使⽤对象
userRepository.sayHi();
}
}
3:运行结果
三:@Component(组件存储)
1:存储bean的代码
@Component
public class UserComponent {
public void sayHi() {
System.out.println("Hi, UserComponent~");
}
}
2:读取bean的代码
@SpringBootApplication
public class SpringIocDemoApplication {
public static void main(String[] args) {
//获取Spring上下⽂对象
ApplicationContext context =
SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
UserComponent userComponent = context.getBean(UserComponent.class);
//使⽤对象
userComponent.sayHi();
}
}
3:运行结果
四:@Configuration(配置存储)
1:存储bean的代码
@Configuration
public class UserConfiguration {
public void sayHi() {
System.out.println("Hi,UserConfiguration~");
}
}
2:读取bean的代码
@SpringBootApplicationpublic class SpringIocDemoApplication {
public static void main(String[] args) {
//获取Spring上下⽂对象
ApplicationContext context =
SpringApplication.run(SpringIocDemoApplication.class, args);
//从Spring上下⽂中获取对象
UserConfiguration userConfiguration =
context.getBean(UserConfiguration.class);
//使⽤对象
userConfiguration.sayHi();
}
}
3:运行结果
五:为什么需要这些不同的注解
从上面的代码不难看出,这些注解的本质都是一样的,把对象交给Spring来管理,只是名称不同,那么它们各自都有什么特点呢?
1:注解的特点
(1)元注解@Component:
@Component是⼀个元注解,也就是说可以注解其他类注解,以下的这几个注解都是它的衍生注解。
@Controller:控制层。接收请求,对请求进行处理,并返回响应
@Service:业务逻辑层,主要处理具体的业务逻辑
@Repository:数据访问层,也叫持久层。主要负责数据的访问操作
@Configuration:配置层。处理项目中一些配置信息
(2)源码分析
以上的衍生注解⾥⾯都有⼀个注解@Component ,说明它们本⾝就是属于@Component 的"⼦类".
2:注解分类的优点
@Controller , @Service 和@Repository ⽤于更具体的⽤例,在开发过程中,如果你要在业务逻辑层使⽤ @Component 或@Service,显然@Service是更好的选择
⽐如杯⼦有喝⽔杯,刷⽛杯等,但是我们更倾向于在⽇常喝⽔时使⽤⽔杯,洗漱时使⽤刷⽛杯.
这样分类的好处,不仅提高了代码的可读性,而且在处理复杂项目的时候,可以更好的对项目进行分层。就像你不能一口吃个胖子,得有条理有规划的吃。