Spring认识与创建

一. 前置⼯作:配置扫描路径(重要)
注意:想要将对象成功的存储到 Spring 中,我们需要配置⼀下存储对象的扫描包路径,只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中。
在 spring-config.xml 添加如下配置:
也就是说,即使添加了注解,如果不是在配置的扫描包下的类对象,也是不能被存储到 Spring 中的。
1.1 添加注解存储 Bean 对象
想要将对象存储在 Spring 中,有两种注解类型可以实现:
1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration。
2. ⽅法注解:@Bean。
接下来我们分别来看。
1.1.1 @Controller(控制器存储)
使⽤ @Controller 存储 bean 的代码如下所示:
此时我们读取上⾯的 UserController 对象,如下代码所示:
1.1.2 @Service(服务存储)
使⽤ @Service 存储 bean 的代码如下所示:
此时我们读取上⾯的 UserService 对象,如下代码所示:
1.1.3 @Repository(仓库存储)
使⽤ @Repository 存储 bean 的代码如下所示:
此时我们读取上⾯的 UserRepository 对象,如下代码所示:
1.1.4 @Component(组件存储)
使⽤ @Component 存储 bean 的代码如下所示:
此时我们读取上⾯的 UserComponent对象,如下代码所示:
1.1.5 @Configuration(配置存储)
使⽤ @Configuration 存储 bean 的代码如下所示:
此时我们读取上⾯的 UserConfiguration对象,如下代码所示:
1.2 为什么要这么多类注解?
既然功能是⼀样的,为什么需要这么多的类注解呢?
这和为什么每个省/市都有⾃⼰的⻋牌号是⼀样的?⽐如陕⻄的⻋牌号就是:陕X:XXXXXX,北京的⻋牌号:京X:XXXXXX,⼀样。甚⾄⼀个省不同的县区也是不同的,⽐如⻄安就是,陕A:XXXXX,咸 阳:陕B:XXXXXX,宝鸡,陕C:XXXXXX,⼀样。这样做的好处除了可以节约号码之外,更重要的作⽤是可以直观的标识⼀辆⻋的归属地。
那么为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类 的⽤途,⽐如:
@Controller:表示的是业务逻辑层;
@Servie:服务层;
@Repository:持久层;
@Configuration:配置层。
程序的⼯程分层,调⽤流程如下:
1.2.1 类注解之间的关系
查看 @Controller / @Service / @Repository / @Configuration 等注解的源码发现:
其实这些注解⾥⾯都有⼀个注解 @Component,说明它们本身就是属于 @Component 的“⼦类”。
1.2.2 Bean 命名规则
通过上⾯示例,我们可以看出,通常我们 bean 使⽤的都是标准的⼤驼峰命名,⽽读取的时候⾸字⺟⼩写就可以获取到 bean 了,如下图所示:
然⽽,当我们⾸字⺟和第⼆个字⺟都是⼤写时,就不能正常读取到 bean 了,如下图所示:
这个时候,我们就要查询 Spring 关于 bean 存储时⽣成的命名规则了。
我们可以在 Idea 中使⽤搜索关键字“beanName”可以看到以下内容:
顺藤摸⽠,我们最后找到了 bean 对象的命名规则的⽅法:
// 如果第⼀个字⺟和第⼆个字⺟都为⼤写的情况,是把 bean 的⾸字⺟也⼤写存储了
// 否则就将⾸字⺟⼩写
所以对于上⾯报错的代码,我们只要改为以下代码就可以正常运⾏了:
1.3 ⽅法注解 @Bean
类注解是添加到某个类上的,⽽⽅法注解是放到某个⽅法上的,如以下代码的实现:
然⽽,当我们写完以上代码,尝试获取 bean 对象中的 user1 时却发现,根本获取不到:
以上程序的执⾏结果如下:
这是为什么嘞?
1.3.1 ⽅法注解要配合类注解使⽤
在 Spring 框架的设计中,⽅法注解 @Bean 要配合类注解才能将对象正常的存储到 Spring 容器中,如下代码所示:
再次执⾏以上代码,运⾏结果如下:
1.3.2 重命名 Bean
可以通过设置 name 属性给 Bean 对象进⾏重命名操作,如下代码所示:
此时我们使⽤ u1 就可以获取到 User 对象了,如下代码所示:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值