简单的将bean对象存储到Spring容器中,可以使用五大类注解实现,也可以通过@Bean方法注解实现。
本文重点围绕这几个问题展开:
1.为什么需要五大类注解?
2.五大类注解之间有没有关系?
3.Spring使用五大类注解生成beanName问题。
4.如何使用方法注解将对象更简单的存储到容器中?
五大类注解有:Controller(控制器)、Service(服务)、Repoistory(仓库)、Configuration(配置)、Component(组件)
使用示例:
- 为什么需要五大类注解?
之前我们存储Bean 时,需要在 spring-config 配置中添加⼀⾏ bean 注册内容才⾏,如下图所示:
⽽现在我们只需要⼀个注解就可以替代之前要写⼀⾏配置的尴尬了,不过在开始存储对象之前,我们先要来点准备⼯作:配置扫描路径,这一点非常重要。
注意:想要将对象成功的存储到 Spring 中,我们需要配置⼀下存储对象的扫描包路径,只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。
在 spring-config.xml 添加如下配置:
使用五大类注解,可以让代码的可读性提高,让程序员能够直观的判断当前类的用途。
- 五大类注解之间有没有关系?
我们可以简单的查看一下这五大类注解的源码:
其实不难看出,@Controller、@Service、@Repository、@Configuration都是基于@Component 实现的,所以@Component 可以认为是其他4个注解的父类。
- Spring使用五大类注解生成beanName问题。
通过前面我们对注解使用,不难发现,我们都是使用的小驼峰。一般来说按照规范,类名我们一般用大驼峰命名,然后我们在使用BeanName的时候,一般用小驼峰,把类名的首字母变成小写。
但是出现了个例,出现了不同的情况,他的类名不是用大驼峰命名,在使用beanName的时候,还是按照以往的习惯将类名首字母变成小写,这个时候就报错了。当我们使用原类名的时候就可以了,这样的问题与我们之前的使用习惯相悖,到底是什么原因呢?下面接着分析:
通过分析了,我们也可以验证一下这个函数的作用:
总结一下,如果类名使用的是大驼峰,则使用的时候用的是小驼峰,那么类名是类似APIController这种前面全部大写的,则使用的时候用原类名。
4.如何使用方法注解将对象更简单的存储到容器中?
@Bean注解只能用在方法上,而且要注意只使用一个Bean注解是无法将对象储存到容器中的。
有时候会让命名更加规范,会使⽤@Bean 注解并重命名,使⽤重命名也能正确获取到对象。注意:重命名的其实是⼀个数组,⼀个 bean 可以有多个名字。
@Bean(name = {"u1", "us1"}) public User user1() { User user = new User(); user.setId(1); user.setName("Java"); return user; } //并且 name={} 可以省略,如下代码所示: @Bean({"u1", "us1"}) public User user1() { User user = new User(); user.setId(1); user.setName("Java"); return user; }