Spring学习之旅-核心基础篇(7)

68 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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区别
  1. @Autowired是spring自带的, @Inject是JSR330规范实现的, @Resource是JSR250规范实现的,需要导入不同的包
  2. @Autowired、 @Inject用法基本一样,不同的是@Autowired有一个request属性
  3. @Autowired、 @Inject是默认按照类型匹配的, @Resource是按照名称匹配的
  4. @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) 的全部内容了。

今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^

如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!

image.png