JavaEE进阶第三课:Spring更简单的对象存储和取出(上)

文章介绍了Spring中使用注解进行Bean对象存储的简化方法,包括@Controller、@Service、@Repository、@Component和@Configuration等五大类注解的用途和区别。文章强调了注解在提高效率和代码分类中的作用,以及方法注解如@Bean的使用,需配合类注解,并处理方法重载的情况。
摘要由CSDN通过智能技术生成

上篇文章介绍了Spring的创建和使用,讲解3了Bean对象的基本存储和取出,这篇文章我们将会介绍Spring更简单的对象存储

1.Bean的存储

原先Bean的存储,是先通过在xml的配置文件内增加bean标签,Spring再根据标签内容进行存储。
在这里插入图片描述
这种方法有个缺点就是如果我们要存储多个对象,效率就会很低,因为你要注册多个bean标签。如何更简单的注册多个对象呢?我们可以采用添加注解的方式来解决。

1.0准备工作

想要用到注解,我们必须先配置一下xml文件,再原来的基础上,添加两行代码,这里和之前的合并了,大家直接使用即可。

<?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">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

这里唯一需要修改的点就是:
在这里插入图片描述
注意base-package的内容,这里填写的就是你想注册到Spring对象所在的包名。你填com.bit.service,存储对象是就会存储service中所有类对应的对象,当然如果sevice底下还有包,里面的内容也会被存储。
如果你想存储java文件(文件目录蓝色的那个java)下所有的类对应的对象,就填**,不过**效率太低,不推荐。

1.1五大类注解

五大类注解:
@Controller(控制器存储)
@Service(服务存储)
@Repository(仓库存储)
@Component(组件存储)
@Configuration(配置存储)

这五个注解的使用方式都一样,最大区别就是它们的含义,这里先说使用,一注解@Controller为例

首先,我们创建两个类,一个类App负责执行main方法,另一个ControllerUser用于存入Spring

@Controller
public class ControllerUser {
    public void fun(){
        System.out.println("我是ControllerUser的fun方法");
    }
}

那么main函数里面的代码和之前取对象的代码一样,先获取Spring上下文对象,再调用它的getBean方法。不过有一个,我们getBean的参数怎么填?因为我们这里是没有id的,看了上一篇文章了同学,就会想到,可以通过类对象的方法来解决:
ControllerUser controllerUser =context.getBean(ControllerUser.class);
这样是可以获取到我们的对象的,如果想通过传入字符串的方式获取,当然也有方法。可以根据Spring的内置的约定来获取。约定源码:
在这里插入图片描述
阅读完源码,可以得到约定:
Spring约定不同的类名定义风格对应不同的参数:
1.ClassName 首字母小写
2.className 首字母小写
3.CName 使用原类名
总结 除了类名是首字母和第二个字母均大写的情况使用原类名,其余全部为小写类名首字母即可。
————————————————————————
如果想查看源码的话,可采用以下操作:
1.在这里插入图片描述
该类名翻译过来就是:注解对象名称生成器
2.找到generateBeanName方法,进入buildDefaultBeanName方法,再进入decapitalize方法即可。

1.1.2为什么要有这么多注解

既然使用方式都一样,相信大家都有一个疑问?为什么还要有五个注解呢,这不是多次四举吗。
那么为什么要有这么多,我们得对着项目来考虑。对于一个项目,分为很多部分:有用户输入信息部分,有根据输入信息执行不同动作的部分,有专门访问数据库的部分等等,这么多注解就是为了帮助我们进行分类,如果所有的类都使用一种注解,就降低了代码的易读性。
那么这些注解都有哪些含义呢?

@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层

• 业务逻辑层主要针对用户输入等等
• 服务层是根据不同的输入调用不同的访问数据库的方法等等,它不直接访问数据库
• 持久层有点抽象,持久化存储就是数据库,它主要负责访问不同的数据库
• 配置层 程序的各种配置
用图来表示:
在这里插入图片描述

这里没有提到@Component(组件存储),却又处处存在@Component,因为这四个注解都是@Component的子类,翻阅源码就可以看到了。

1.2方法注解

1.1.1方法注解需要搭配类注解一起使用

@Bean

这个注解是将修饰方法的返回值对象注册到Spring中
我们创建三个类:
User被存储,BeanUser包含一个返回User对象的方法,App执行main函数。

public class User {
    public int id;

    public User(int id) {
        this.id = id;
    }

    public void fun(){
        System.out.println("我是User的fun方法");
    }
}

public class BeanUser {
    @Bean
    public User getUser(){
        return new User(99);
    }
}

public class App {

    public static void main(String[] args) {
        ApplicationContext context=
                new ClassPathXmlApplicationContext("spring-config.xml");
        User user=(User) context.getBean("");
        System.out.println(user.id);
    }

这里依然是不知道,getBean的参数,这里的话就不买关子,这里的默认参数是被注解的方法名,这里就是getUser。我们执行一下:
在这里插入图片描述
结果报错了,这是这么回事呢?查看自己的参数没问题啊,说明取是没问题的,那么肯定就是存出了问题。
使用方法注解需要搭配类注解一起使用也就是BeanUser需要添加类注解,这是为什么呢?
因为方法注解是在类里面的,Spring扫描我们的包时,先考虑有类注解的类,再在它的基础上看有没有方法注解的方法,这样是为了提高效率,不然一个类那么多方法要扫描到什么时候。
那么我们来加上类注解::
在这里插入图片描述
结果正确!

1.2.2方法重载怎么办

我们知道,给方法添加注解很大的问题就是方法重名怎么办?我们的getBean参数又怎么填呢?那么可以通过重命名的方式来处理:
在这里插入图片描述
名称可以有多个,但是一旦使用重命名,之前的方法名获取就会失效。
缩写:@Bean({"n1","n2"})

小结

这篇文章主要介绍更简单的Bean对象的存储,下一篇会介绍更简单的对象取出,喜欢的话还请多多关注点赞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值