Spring|【Spring】Spring 更简单的读取和存储对象

博客主页:敲代码的布莱恩特
欢迎点赞 收藏 ?留言 欢迎讨论!
本文由 【敲代码的布莱恩特】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!?
精品专栏(不定时更新)【JavaSE】 【Java数据结构】【LeetCode】
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片


Spring 更简单的读取和存储对象
  • 一、将对象 储存到Spring中
    • 1. 先创建一个maven项目
    • 2. 添加Spring的核心包(引入spring-context和spring-beans框架)maven--->spring
    • 3. 配置Spring xml 文件 ---> 配置Spring组件扫描路径(所有需要存储在Spring中的对象都要放在此目录)
    • 4. 创建一个普通类,添加main【作用:方便测试】
    • 5. 使用注解实现对象储存在Spring框架
      • 为什么要这么多类注解
      • a. 类注解(5大类注解)
        • @Controller 控制器(对象储存)
        • @Service
        • @Repository
        • @Component
        • @Configuration
        • Bean对象的使用
      • b. 方法注解 @Bean
        • @Bean重命名
      • @Controller/@Service/@Repository/@Component/@Configuration的关系
  • 二、Bean的命名规则
    • Spring 是如何制作出类注解beanName的
  • 三、从Spring中获取对象
    • 1. 属性注入(@Autowired)
    • 2. Setter注入(@Autowired)
    • 3. 构造函数注入(推荐)(@Autowired)
  • 四、注入的关键字有
    • 1. @Autowired
    • 2. @Resource:另一种注入关键字
      • a. 属性注入
      • b. 使用Setter方式注入
      • c. 注意:@Resource注解不能使用在构造方法注入上
  • 五、@Autowired和@Resource的区别
  • 六、同?类型多个 Bean 报错处理
    • 1. 使用@Resource(name="user1") 定义。
    • 2. 使用 @Qualifier 注解定义名称。
    • 图解说明@Autowired和@Resource关于注入对象名称的问题

一、将对象 储存到Spring中 1. 先创建一个maven项目
创建maven就不再赘述了,详情见【Spring创建与使用】篇
2. 添加Spring的核心包(引入spring-context和spring-beans框架)maven—>spring Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

3. 配置Spring xml 文件 —> 配置Spring组件扫描路径(所有需要存储在Spring中的对象都要放在此目录) Spring|【Spring】Spring 更简单的读取和存储对象
文章图片


Spring|【Spring】Spring 更简单的读取和存储对象
文章图片


4. 创建一个普通类,添加main【作用:方便测试】
5. 使用注解实现对象储存在Spring框架 想要将对象存储在 Spring 中,有两种注解类型可以实现:
  1. 类注解:
    @Controller
    @Service
    @Repository
    @Component
    @Configuration
  2. 方法注解:@Bean
接下来我们分别来看
为什么要这么多类注解
【Spring|【Spring】Spring 更简单的读取和存储对象】既然功能是?样的,为什么需要这么多的类注解呢?
这和为什么每个省/市都有??的?牌号是?样的??如陕?的?牌号就是:陕X:XXXXXX,北京的? 牌号:京X:XXXXXX,?样。甚??个省不同的县区也是不同的,?如?安就是,陕A:XXXXX,咸 阳:陕B:XXXXXX,宝鸡,陕C:XXXXXX,?样。这样做的好处除了可以节约号码之外,更重要的作 ?是可以直观的标识?辆?的归属地。
那么为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类 的?途,?如:
@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层。
程序的?程分层,调?流程如下:
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

a. 类注解(5大类注解)
注意事项:
  1. 读取存入对象的id:默认情况下就是首字母小写Spring|【Spring】Spring 更简单的读取和存储对象
    文章图片
  2. 关于储存目录Spring|【Spring】Spring 更简单的读取和存储对象
    文章图片
@Controller 控制器(对象储存) Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Service Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Repository Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Component Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Configuration Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

Bean对象的使用 用一个main方法使用
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

b. 方法注解 @Bean
使用方法注解@Bean将对象储存到Spring
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Bean重命名 Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

@Controller/@Service/@Repository/@Component/@Configuration的关系
其实这些注解里面都有?个注解 @Component,说明它们本身就是属于@Component 的“子类”
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

二、Bean的命名规则
  • 首字母和第二个字母都非大写,首字母小写来获取Bean
  • 如果首字母和第二个字母都是大写,那么直接使用原Bean名来获取Bean
Spring 是如何制作出类注解beanName的 Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

三、从Spring中获取对象 1. 属性注入(@Autowired) Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

2. Setter注入(@Autowired) Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

3. 构造函数注入(推荐)(@Autowired) Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

注意事项1: 如果当前类里面只有一个构造方法,那么@Autowired 注解是可以被省略的(这点和Setter注入是不同的)
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

注意事项2: 如果当前类中存在一个以上的构造方法,那么@Autowired 注解不能被省略
四、注入的关键字有 1. @Autowired 使用请看上边
2. @Resource:另一种注入关键字 使用 @Resource 注解注入
它的用法和@Autowired类似
a. 属性注入
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

b. 使用Setter方式注入
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

c. 注意:@Resource注解不能使用在构造方法注入上
Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

五、@Autowired和@Resource的区别
  • 1、出身不同:@Autowired 来自于 Spring,而 @Resource 来?于 JDK 的注解;
  • 2、作用范围不同: 使用@Autowired可以进行属性注入、Setter注入、构造器注入 ;而@Resource只能进行属性注入和Setter注入。
  • 3、功能不同:@Resource可以配合更多的属性进行使用,而@Autowired支持的属性较少,比如使用@Resource可以配合name属性进行使用,从而完成对象的别名注入。
六、同?类型多个 Bean 报错处理 解决同?个类型,多个 bean 的解决?案有以下两个
1. 使用@Resource(name=“user1”) 定义。
@Controller class UserController4 { // 注? @Resource(name = "user1") private User user; public User getUser() { return user; } }

2. 使用 @Qualifier 注解定义名称。
@Controller public class UserController5 { // 注? @Autowired @Qualifier(value = "https://www.it610.com/article/user2") private User user; public User getUser() { return user; } }

图解说明@Autowired和@Resource关于注入对象名称的问题 Spring|【Spring】Spring 更简单的读取和存储对象
文章图片

    推荐阅读