更多Spring文章,欢迎点击 一灰灰Blog-Spring专题

我们知道在Spring中,有两个非常有名的特性,依赖注入(DI)与切面(AOP),其中依赖注入其主要的作用,可以说就是维护Spring容器创建的Bean之间的依赖关系,简单来说就是一个bean(假定名为A)持有另一个Bean(假定名为B)的引用作为成员变量b,则由Spring容器自动将B赋值给A的成员变量b

因此在想理解依赖注入,就有必要了解下创建和使用Bean的几种姿势;本篇博文作为基础篇,将介绍

  • bean的基本创建方式
  • bean的常见使用姿势

I. Bean的几种创建方式

在SpringBoot的大环境下,基本上不再使用以前的xml配置,所以本篇博文也不再介绍以往Spring中,通过xml来声明bean的使用方式

1. 注解方式

这种也是我们最常见的使用姿势,一般就是在类上添加@Component, @Service等注解(@Controller表示提供http接口的bean, @Configuration表示配置类Bean)

添加上这种注解的类,会被Spring容器扫描加载,自动生成单例的bean,一个典型的实例如下

@Component
public class AnoDemoBean {private String type = "AnoDemoBean";public String getName(String name) {return name + " _" + type;}
}

如果在实际测试时,发现无法获取上面的bean,就需要注意下bean的包路径,是否在被你程序的扫描路径包含

2. @Bean定义方式

这种方式,主要是结合Configuration来定义bean,首先是声明一个配置类,然后再配置类中,通过返回bean对象的方法形式来声明bean,一般使用姿势如下

@Data
public class ConfigDemoBean {private String type = "ConfigDemoBean";public String getName(String name) {return name + " _" + type;}
}@Configuration
public class BeanLoadConfig {@Beanpublic ConfigDemoBean configDemoBean() {return new ConfigDemoBean();}
}

需要说明的一点是BeanLoadConfig类本身也被Spring容器看为一个Bean

3. 工厂类方式

FactoryBean本质上也是一个Bean,但是可以通过他来生成你期待的Bean,在实际的业务场景中可能使用场景不多,但是在抽象的框架层面应用很广,一个简单的使用姿势如

public class FacDemoBean {private String type = "FacDemoBean";public String getName(String name) {return name + " _" + type;}
}public class DemoFactoryBean implements FactoryBean<FacDemoBean> {@Overridepublic FacDemoBean getObject() throws Exception {return new FacDemoBean();}@Overridepublic Class<?> getObjectType() {return FacDemoBean.class;}@Overridepublic boolean isSingleton() {return true;}
}@Configuration
public class BeanLoadConfig {@Beanpublic DemoFactoryBean demoFactoryBean() {return new DemoFactoryBean();}@Beanpublic FacDemoBean facDemoBean(DemoFactoryBean demoFactoryBean) throws Exception {return demoFactoryBean.getObject();}
}

II. Bean的使用姿势

前面介绍了如何创建Bean,创建完之后,接着就是使用了,下面介绍最基本的几种使用方式

1. Autowired注入

将注解@Autowired或者@Resource添加到成员变量上,即表示这个成员变量会由Spring容器注入对应的Bean对象

@Autowired
private ConfigDemoBean configDemoBean;

由Spring容器依赖注入的方式,从代码上看,是不会找到有什么地方主动的塞入了这个值,但是使用处却可以直接使用,因此需要注意有可能会出现npe

2. Setter方法

和前面其实也差不多,只不过注解放在了setter方法上

private FacDemoBean facDemoBean;@Autowired
private void setFacDemoBean(FacDemoBean facDemoBean) {this.facDemoBean = facDemoBean;
}

3. 构造方法

顾名思义,就是在构造方法中传入Bean对象来初始化

public class DemoController {private AnoDemoBean anoDemoBean;public DemoController(AnoDemoBean anoDemoBean) {this.anoDemoBean = anoDemoBean;}
}

这种方式的好处是可以避免潜在的NPE问题(后面将有博文专门提及),而且针对Bean不存在的情况,系统会抛出异常,提早知道问题

4. 小结

本篇主要介绍了Bean的基本创建和使用姿势,基本上也是我们在平常的业务开发中使用得最广的方式了,是不是会这些就行了呢?业务做多了之后,随之而来就会有一些疑问

  • 提供的jar包给第三方使用,如何保证其他人能顺利加载jar包中的bean?
  • bean初始化的先后顺序是怎样的?
  • 可以手动注册一个Bean么,改怎么做?
  • BeanFactory与FactoryBean的区别是啥,各自的典型应用场景又是什么?
  • 重名的Bean是否可以解决?

II. 其他

0. 项目

  • 工程:spring-boot-demo

1. 一灰灰Blog

  • 一灰灰Blog个人博客 https://blog.hhui.top
  • 一灰灰Blog-Spring专题博客 http://spring.hhui.top

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

  • 微博地址: 小灰灰Blog
  • QQ: 一灰灰/3302797840

3. 扫描关注

一灰灰blog

知识星球

SpringBoot基础篇Bean之基本定义与使用相关推荐

  1. SpringBoot基础篇Bean之条件注入之注解使用

    bean的条件注入,除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己实现Condtion接口,本篇博文主要介绍下 ...

  2. 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇

    目录 二.掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3  最新的Spring Boot3 新 ...

  3. SpringBoot SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 2.2 yaml 文件

    SpringBoot [千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程] SpringBoot 基础篇(第一篇) 第2章 SpringBoot 全局配置 ...

  4. 黑马SpringBoot --基础篇

    目录 导读 1.快速上手 1.1SpringBoot入门程序开发 1.1.1基础创建方式--常规 1.1.2手动创建方式--补充 1.1.3基础创建方式--下载 1.1.4基础创建方式--阿里云 1. ...

  5. springboot基础篇(快速入门 + 完整项目案例)

    目录 1.springboot简介 2.REST风格 1.简介 2.RESTful 3.复制工程 4.属性配置 1.application.properties 2.application.yml.. ...

  6. SpringBoot基础篇AOP之基本使用姿势小结

    原文:190301-SpringBoot基础篇AOP之基本使用姿势小结 一般来讲,谈到Spring的特性,绕不过去的就是DI(依赖注入)和AOP(切面),在将bean的系列中,说了DI的多种使用姿势: ...

  7. SpringBoot基础篇

    配置maven file-setting-build-build tool 将项目配置成可执行jar 1打包 mavenProject-lifecircle-package 2寻找 target 3执 ...

  8. SpringBoot基础篇配置信息之配置刷新

    2019独角兽企业重金招聘Python工程师标准>>> 更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 配置的刷新,从第一篇就提出了这个问题,但是一直都没有说到,那 ...

  9. SpringBoot基础篇(一):Spring Boot入门

    我们今天开始对SpringBoot的学习,本篇主要是Spring Boot的入门部分. 1.SpringBoot简介 引用SpringBoot在百度百科中的含义: Spring Boot是由Pivot ...

最新文章

  1. iOS支付宝支付集成
  2. 纪念逝去的岁月——C/C++字符串反转
  3. 什么是OOP(面向对象编程)?
  4. centos安装Oracle virtual box
  5. 二分查找基础概念与经典题目(Leetcode题解-Python语言)二分数值型
  6. 循环队列CircleQueue的使用
  7. 【Linux下Inotify + Rsync文件实时同步】
  8. Ubuntu 安装 typora
  9. 解决markdown快捷键在输入法和chrome浏览器下的冲突问题
  10. python绘制三角函数图像_用python画三角函数
  11. MyBatis缓存介绍
  12. orge,Nebula与klayGE对比
  13. win10安装.net framework 3.5 错误代码 错误代码 0x800F0906、0x800F081F、0x800F0907
  14. JAVA泡泡堂网络游戏的设计与实现
  15. 【报告分享】抖音企业号操作指南-巨量引擎(附下载)
  16. 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)
  17. 高校排课系统/排课管理系统的设计与实现
  18. cmd下使用命令切换目录
  19. 无聊科技正经事(第7期):跟村上春树学跑步,向古川武士学养成
  20. Android slideback框架,SlideBack 一个仿 即刻 APP 滑动返回效果的 Demo @codeKK Android开源站...

热门文章

  1. 前端笔记:动画介绍与CSS动画说明
  2. 源商城-最专业的虚拟产品销售平台源码(pc端+h5端)
  3. beeline 使用
  4. 6种互联网创业副业策略
  5. 华为鸿蒙老手机,余承东宣布将有百款手机升级鸿蒙OS,这些机型2日公测,还提醒别扔老手机...
  6. 【观察】解读QBBSS质量链落地价值,质量强国战略迈出关键一步
  7. Windows8, 一个半成品的mac模仿者?
  8. CDH安装过程中遇到的问题
  9. 一个人的固执里,藏着低水平的认知
  10. ENSP安装华为防火墙模拟器(附USG模拟设备安装包)