前言:在上篇文章中,小编写了一个Spring的创建和使用的相关博客:Spring的创建和使用-CSDN博客,但是,操作/思路比较麻烦,那么本文主要带领大家走进:Spring更加简单的读取和存储对象!
本文主要讲解用注解来实现Spring更加简单的读取和存储对象:五大类注解:
- @Controller:控制器,验证用户请求的数据正确性(安保系统)
- @Service:服务,编排和调度具体执行方法的(客服中心)
- @Repository:持久层,和数据库交互(执行者)
- @Component:组件(工具类)
- @Configuration:配置项(项目中的一些配置)
前置工作:配置扫描路径(重要)
注意:想要将对象成功的存储到Spring中,我们需要配置一下存储对象的扫描包路径,只有被配置的包下所有类,添加了注解,才能被正确的识别并保存到Spring中!
在spring-config.xml文件中添加如下配置:
<conent:component-scan base-package="com.java.demo">
</conent:component-scan>
因此,在上述代码的基础上,要求:五大类注解必须在component-scan包下。但是,即使在component-scan下,如果没有五大类注解,一样是不能将当前对象存储到spring中的,在component-scan下的所有子包下的类,只要加了五大类注解,同样能存储到spring中!!
当我们查看五大类源码以后,可知:
可以认为:@Controller/@Service/@Repository/@Configuration都是@Component“子类”,都是针对于@Component的“一个扩展!!
那么,为什么需要有五大类注解??仅需要一个@Component不就啥事都解决了吗??
其实,五大类注解的本质目的:让程序员看到注解之后,知道当前的类的作用!!
有了这个问题,我们就不得不谈:JavaEE标准分层了:
在JavaEE标准分层中(至少分3层):
- 控制层
- 服务层
- 数据持久层
Bean命名规则:
默认情况下是首字母小写,如果类名第一个字母和第二个字母都为小写的情况下,Bean名称为原类名。
使用方法注解@Bean存储对象到Spring中(要求:使用该方法注解@Bean的方法,一定要有返回值)
注意事项:
- @Bean命名规则和五大类注解的命名规则不同
@Bean命名规则,默认情况下,@Bean存储的对象的名称=方法名
User user=context.getBean("user1",User.class);
- @Bean注解必须要配合五大类注解一起使用(处于Spring性能设计所规定的策略)
创建User对象:
package com.spring.demo; public class User { private Integer uid; private String username; private String password; private Integer age; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
将User对象放入Spring容器中:
package com.spring.demo; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class UserBeans { @Bean public User user1(){ User user=new User(); user.setUid(1); user.setUsername("张三"); user.setPassword("123456"); user.setAge(18); return user; } }
那么,从Spring容器中获取User对象:
package com.spring.demo; import org.springframework.context.ApplicationContext; public class App { public static void main(String[] args) { //得到Spring 容器 ApplicationContext context= new ClassPathXmlApplicationContext("spring.config.xml"); User usr=context.getBeen("user1",User.class); System.out.println(usr.getUsername()); } }
当然,对于上述的@Bean可以进行重命名:
@Bean(value = {"user1","u1"}) @Bean(name = {"user1","u1"})
当你给@Bean进行重命名以后,此时只能只要重命名的名字,才可以获得对象,默认使用方法名获取对象的方式就不能用了!!
Spring容器中允许将同一个类型的对象,存储到容器多个(多份)