开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
写在前面
作为一个java程序员,spring应该都不会陌生了吧?
对于大部分程序员来说,spring的入门,估计跑起一个框架,熟悉一下开发的流程,基本上就掌握spring框架的开发了。
随着开发年限的变大,我们不能仅仅是掌握到这个地步,更应该深入的学习spring框架。
这不,接下来就是spring框架的学习之旅了,希望可以帮助到大家。
一、基于注解和XML混合方式的使用
1.1 常用注解
1.1.1 DI注解(依赖注入)
相当于:
<property name="" ref="">
<property name="" value="">
1.1.1.1 @Autowired
- @Autowired默认按类型装配( byType ) ,
- @Autowired是由AutowiredAnnotationBeanPostProcessor类实现
- @Autowired是spring自带的注解
- @Autowired默认情况下要求依赖对象必须存在,如果需要允许null值,可以设置它的required属性为false ,如: @Autowired (required=false)
- 如果我们想按名称装配( byName )可以结合@Qualifier注解进行使用
1.1.1.2 @Qualifier
- 在自动按照类型注入的基础之上, 再按照Bean的id注入。
- 它在给字段注入时不能独立使用, 必须和@Autowire 一起使用;
- 但是给方法参数注入时,可以独立使用。
1.1.1.3 @Resource
- @Resource默认按名称装配( byName ) , 可以通过@Resource的name属性指定名称,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。
- @Resource属于J2EE JSR250规范的实现
- 但是需要注意的是,如果name属性一旦指定 ,就只会按照名称进行装配。
推荐使用@Resource注解,因为它是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
1.1.1.4 @Inject
- @Inject是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named
- @Inject是JSR330中的规范,需要导入javax.inject.Inject;实现注入。
- @Inject可以作用在变量、setter方法、 构造函数上。
1.1.1.5 @Value
- 给基本类型和String类型注入值
- 可以使用占位符获取属性文件中的值。
@value("${name}")//name是properties文件中的key
private String name;
1.1.1.6 @Autowired、@Resource、@Inject区别
- @Autowired是spring自带的, @Inject是JSR330规范实现的, @Resource是JSR250规范实现的,需要导入不同的包
- @Autowired、 @Inject用法基本一样,不同的是@Autowired有一个request属性
- @Autowired、 @Inject是默认按照类型匹配的, @Resource是按照名称匹配的
- @Autowired如果需要按照名称匹配需要和@Qualifier一起使用 , @Inject和@Name一起使用
1.1.1.7 改变Bean作用范围的注解
- @Scope: 指定bean 的作用范围,相当于下面的配置:
<bean id="" class="" scope="">
- 属性:
value :指定范围的值。取值: singleton prototype request session globalsession !
1.1.1.8 生命周期相关注解
- @PostConstruct
- @PreDestroy
相当于:
<bean id="" class="" init-method="" destroy-method="" />
1.2 关于注解和XML的选择问题
- 注解的优势:
配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
- XML的优势:
修改时,不用改源码。不涉及重新编译和部署。
好了,以上就是Spring学习之旅-核心基础篇(7) 的全部内容了。
今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^
如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!