品牌型号:联想ThinkPad X1
系统:Windows 10 家庭版
软件版本:Spring 5.3.7
在做Java后端开发的时候,Spring框架的依赖注入是所有Java程序员的经常会用到的技能,可是很多新手在开发的时候会产生一些疑问,之前在练手的时候,service、dao层代码都是自己写的,知道怎么注入bean交给Spring管理。但是实际开发的时候项目里的工具类、第三方组件并不是自己编写的,这时候Spring该如何注入第三方Bean呢?又该怎么灵活注入各类对象呢?在做项目的时候,第三方jar包中的工具对象、配置类实例到处可以见,但是硬编码new对象违背了Spring中的IOC思想,会使代码耦合度变大并且增加维护成本。接下来我就围绕Spring如何注入第三方Bean,Spring怎么注入对象展开介绍,帮大家彻底搞定这类常见的IOC实操问题。
一、Spring注入第三方Bean
我们在配置第三方Bean的时候需要考虑下这个被注入的Bean的实例化方式是什么,是通过构造参数进行实例化,还是通过工厂方式实例化。构造参数实例化可以是有参构造,也可以是无参构造,工厂方式实例化有静态工厂方法、实例工厂方法。知道怎么实例化之后,我们还要考虑这个Bean是否需要注入必要的属性。
这里以Connection对象为例,我们在写JDBC的时候,先使用Class.forName注册驱动,然后获取Connection对象。

从JDBC4.0开始,支持自动驱动自动加载,所以我们可以省去Class.forName的配置。我们如果要将Connection对象交给Spring管理,我们通过分析DriverManager源码中的getConnection方法得知,这是一个典型的静态工厂方法。

我们在Spring中按照静态工厂方法进行如下配置:

查看getConnection方法需要url、user、password三个数据库参数,我们在使用constructor-arg参数注入这三个属性即可。

二、Spring怎么注入对象
使用Spring控制反转后,将创建Bean的权利交给了Spring,那么,在开发service层的时候,有时候我们要在service层中注入dao对象。这个时候,该怎么做呢?这就涉及到Spring的依赖注入(DI)特性了。Spring的依赖注入常用的有两种方式,一种是通过set方法进行注入,我们在Service中创建dao属性,然后采用封装标准java bean的方式创建setXXXDao方法。

然后我们在配置文件中找到这个Service的bean,在bean中通过property完成Dao对象注入。

当然,也可以在Bean标签中使用autowire属性去配置自动注入方式,这个属性有两个属性值byName和byType,byName是通过属性名自动装配,会匹配setXXX方法和bean的id是否一致,byType会去通过Bean的类型从容器中匹配。

除了使用set方法之外,我们还可以使用构造方法去完成装配,在被注入的Bean创建一个有参构造,构造方法中的形参是要注入的Bean的引用,然后在配置文件中使用constructor-arg进行注入即可。
以上就是Spring注入第三方Bean,Spring怎么注入对象的全部内容了。我们在使用Spring去配置注入第三方Bean的时候,主要是看被配置的Bean的实例化方式是构造参数还是使用工厂方法,这一块如果有不清楚的同学可以去了解下“Spring实例化Bean的几种方式”,确定Bean的实例化方式后,我们要看下是否有必须要注入的属性,知道这些后我们就可以很轻松的在Spring中配置第三方Bean了。我们在项目开发的时候,因为IOC解耦,创建Bean的权利都交给了Spring,在Service中要注入Dao可以考虑依赖注入,可以使用构造方法或者setter方法实现对象注入。