Dependency Injection是spring框架核心 ioc 的具体实现。程序在编写时通过控制反转把对象的创建交给了spring,但是代码中不可能出现没有依赖的情况。
ioc 解耦只是降低他们的依赖关系但不会消除,坐等框架把持久层对象传入业务层而不用我们自己去获取。
Spring框架实现依赖注入
依赖注入作用是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种一种是属性setter方法注入,另一种是构造方法注入。
属性setter方法注入:
指IoC容器使用setter方法来注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法即可实现基于setter方法的依赖注入。
构造方法注入:
指IoC容器使用构造方法来注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。
了解了两种注入方式后,下面以属性setter方法注入的方式为例讲解Spring容器在应用中如何实现依赖注入。
1、在com.itheima.ioc包中,创建接口UserService,在接口中编写一个say()方法:
UserService.java
2、在com.itheima.ioc包中创建UserService接口的实现类UserServiceImpl,在类中声明userDao属性,并添加属性的setter方法:
UserServiceImpl.java
3、在配置文件applicationContext.xml中创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息并将userDao的实例注入到userService中,其代码如下:
在上述代码中<property>是<bean>元素的子元素,它用于调用Bean实例中的setUserDao()方法完成属性赋值,从而实现依赖注入。其name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值。
4、在com.itheima.ioc包中创建测试类TestDI,来对程序进行测试,编辑后所示:
5、执行程序后控制台的输出结果如图:
运行结果
从上图可以看出使用Spring容器通过UserService实现类中的say()方法,调用了UserDao实现类中的say()方法并输出了结果。这就是Spring容器属性setter注入的方式也是实际开发中最为常用的一种方式。
黑马程序员
致力于培养高级软件工程师
96 位专职课研技术大牛
879 人严选教学团队
累计培养 30余万名 优质IT人才
以高品质教学质量赢得好口碑
部分学科最高优惠2000元
立即扫码抢占优惠名额
课程老师1对1服务,全程免费
????????????
JavaEE | HTML&JS+前端 | Python+大数据开发 |
人工智能开发 | UI/UE设计 | 软件测试 |
新媒体+短视频直播运营 | 产品经理 | Linux云计算+运维开发 |
智能机器人软件开发 | 电商视觉运营设计 | / |
线上课程也可扫码咨询
更多疑问可添加播妞微信
heiniu526
- 推荐阅读 -
据调查:00后女程序员比例飙升!男程序员再找不到对象,可别怪我!
![](https://i-blog.csdnimg.cn/blog_migrate/e1693f2dbc9f6399ab36c65fa6907883.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8ddc64e34acdb58b92df8142d63ce116.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/de55377ad62eedd1c900e826205cb0ff.jpeg)
点个在看,8月好运满满