前言
之前我们存储获取 Bean 的操作很繁琐,需要将 Bean 放入 xml 文件中,获取 Bean 还必须得获取上下文,就很麻烦。
其实这些都可以简化,在 Spring 中想要更简单的存储和读取对象,核⼼是使⽤注解。
想要将对象存储在 Spring 中,有两种注解类型可以实现:
- 类注解:@Controller、@Service、@Repository、@Component、@Configuration。
- ⽅法注解:@Bean
获取对象的实现⽅法有以下 3 种:
- 属性注⼊
- 构造⽅法注⼊
- Setter 注⼊
存储 Bean 对象
五大类注解
五大类注解有:
@Controller(控制器)校验参数的合法性,相当于安检系统
@Service(服务)业务组装,相当于客服中心
@Repository(数据持久层)实际业务处理,就是实际办理的业务
@Component(组件)工具类层,基础工具
@Configuration(配置层)配置
首先,我们得配置一下 xml 文件:
注意:使用类注解存储 bean,和使用 xml 存储 bean 是可以混用的。
User 类:
//使用类注解 @Controller public class User { public void sayHi(String name) { System.out.println("hello " + name); } }
public class App { public static void main(String[] args) { //得到 spring 上下文 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); //得到 bean 对象 User user = (User) context.getBean("user"); user.sayHi("张三"); } }
关于 getBean 后面应该填什么?
对于不同的类名有不同的写法,如果首字母大写,第二个字母小写,那么 bean 的名称就是类名首字母小写;如果不满足首字母大写第二字母小写,则使用原类名。
当然了,我们也可以在类注解后面设置 id,通过 id 来得到 bean 对象。
//id 可以随便取, 两种方式都可 //@Controller(value = "666") @Controller("666") public class User { public void sayHi(String name) { System.out.println("hello " + name); } }
public class App { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); User user = (User) context.getBean("666"); user.sayHi("张三"); } }
来看看五大类注解间的关系:
这些注解⾥⾯都有⼀个注解 @Component,说明它们本身就是属于 @Component 的“⼦类”。
所以它们在使用上都差不多,那为什么还要分出 5 大类呢?
直接一个 @Component 就可以 存储 bean 对象了,还要分这么多有什么用呢?
其实是让程序员看到类注解之后,就能直接了解当前类的⽤途,比如我们看到一辆车的车牌号就知道它的归属地是哪,这个也一样。
程序的⼯程分层,调⽤流程如下: