简单存 Bean 对象 -- 五大类注解以及 Bean 方法(上)

简介: 简单存 Bean 对象 -- 五大类注解以及 Bean 方法(上)

一. 配置扫描路径



前面创建 Spring 项目和简单使用一文中说到(如何创建一个 Spring 项目并简单使用), 在获取 Spring 的上下文对象时, 是先去 配置文件中读取, 获得 Spring 容器. 因此, 在使用更简单的存 Bean 对象的注解时, 我们也需要进行配置文件


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--  配置扫描路径, 指定要扫描那个路径底下的类注解, 不在该包底下或者在该包底下不加五大类注解都不能读取  -->
<!--  在component-scan 下的子包下加了五大类注解一样可以加入到bean中  -->
    <content:component-scan base-package="demo1.java"></content:component-scan>
</beans>


想要用注解的方式将 Bean 对象注册到 Spring 容器中 , 就需要配置 content: component-scan base-package="具体包路径", 只有配置包路径地下的所有类, 添加了注解才能被正确识别到注册到 Spring 中

image.png


二. 简单存储 Bean 的五大类注解



1. @Controller 注解


同样的, 要进行注册到 Spring 容器中, 需要先创建 Bean 对象(普通 Java 对象)

c374c1a5a9bc4779bbde4605b82973f1.png


创建好了对象以后, 采用三步走获取 Bean 对象并使用

e644363ec14449978165d2d71992cde7.png


调用方法成功, 表示成功获取指定 Bean 对象

e6846994220c4974b90a2e2721b4bd17.png


@controller 表示的是业务逻辑层


2. @Service 注解


同上面一样, 创建 Bean 对象并添加注解进行获取使用

4ab2c149734d403cb3fb11dfa58db536.png


调用方法成功

eb9e5bcc8a3e49918f7608bac59f5a59.png


3. @Repository 注解

acdb2065f7e340c6b21b124a12df9951.png

调用方法成功

670975235da8498bab755f5b1a61f1b5.png


4. @Component 注解


image.png


调用方法成功

image.png


@Component 组件存储


5. @Configuration 注解


e0e7d273cbcd43e49531418052dda5d9.png


调用方法成功

2a5d22bf09bf48d4b60272019c11e6e7.png


6. Bean 的命名规则


上面的五大类注解中, 都会发现一个问题: 那就是这里的获取 Bean 对象时, 使用的不在是 spring-config.xml 里的指定 Bean 标签的 id 和类 类型的组合获取 Bean 对象, 哪该如何获取类注解下注入的 Bean 对象呢?


下面看一组示例

1359f36d2b874c5b8c698f71abb7bf3d.png


调用方法验证

image.png


此时我们发现, 和上面五大类注解讲解的时候是一样的获取方法, 但是现在却报错了这是为什么? 仔细看不难发现, 之前的五大类讲解时, 都是类名首字母大写, 而这里是类名的首字母和第二个字母都大写, 因此, 此处我们就要去看看 Bean 的命名规则到底是如何讲解的了

public static String decapitalize(String name) {
        if (name == null || name.length() == 0) {
            return name;
        }
        if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
                        Character.isUpperCase(name.charAt(0))){
            return name;
        }
        char chars[] = name.toCharArray();
        chars[0] = Character.toLowerCase(chars[0]);
        return new String(chars);
    }


以上为 BeanName 的命名源码, 从上面源码可以看出, 当 首字母和第二个字母都大写的时候, 直接放回当前类名

733704c8b4ad450f9132e4b7ef831e13.png


7. 为什么有这么多相同功能的类注解


细心的可以发现, 上面五大类注解都干了同一件事, 那就是将 Bean 对象注入到 Spring 容器中, 那为什么还需要搞这么多个类注解呢? 是否有这个疑问?


8. 五大类注解之间有关系嘛?


既然功能都是差不多, 那么他们之间有什么关系嘛?

就这个问题, 去看他们的源码


1. @Controller 源码


e05ac510a4774d6fb4c13f5676c4fd66.png


2. @Service 源码


cdd33c6894044748a9a29ef3a7de1011.png


3. @Repository 源码


1c4cbde44bc44abfac1a96e3e7f8935d.png


4. @Configuration 源码


image.png


5. @Component 源码


image.png


通过观察上述源码, 发现五大类注解中, 都包含有 @Target @Retention @Documented 注解 ,

同时 除了 @Component 注解外, 其余四个注解都包含了 @Component 注解

因此, 我们可以知道, 其他四个注解都是 @Component 注解的子类


相关文章
|
6月前
|
存储 XML Java
Spring框架学习 -- 读取和存储Bean对象
Spring框架学习 -- 读取和存储Bean对象
52 0
Spring框架学习 -- 读取和存储Bean对象
|
Java Spring 容器
简单存 Bean 对象 -- 五大类注解以及 Bean 方法(下)
简单存 Bean 对象 -- 五大类注解以及 Bean 方法(下)
|
6月前
|
XML Java 数据格式
spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解
spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解
71 0
|
6月前
|
XML Java 数据格式
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
78 0
|
存储 Java Spring
Spring框架中注入集合对象
你好看官,里面请!今天笔者讲的是在Spring框架中关于注入集合对象的用法(有示例!全网最详细!!) 不懂可以在评论区留言,我看到会及时回复。 注意:本文仅用与学习参考,不可用于商业用途。
806 3
Spring框架中注入集合对象
|
Java C++ Spring
Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(下)
Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(下)
122 0
|
存储 Java Spring
Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(上)
Spring更简单的实现Bean对象的存取(利用注解储存和注入Bean对象)(上)
122 0
|
存储 设计模式 Java
Spring【五大类注解的存储和读取Bean方法注解】(下)
Spring【五大类注解的存储和读取Bean方法注解】(下)
Spring【五大类注解的存储和读取Bean方法注解】(下)
|
存储 XML Java
Spring【五大类注解的存储和读取Bean方法注解】(上)
Spring【五大类注解的存储和读取Bean方法注解】
Spring【五大类注解的存储和读取Bean方法注解】(上)
|
Java 关系型数据库 MySQL
如何使用@Value注解为bean的属性赋值呢
如何使用@Value注解为bean的属性赋值呢