在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
Spring框架实现依赖注入操作步骤解析。Dependency Injection是spring框架核心 ioc 的具体实现。程序在编写时通过控制反转把对象的创建交给了spring,但是代码中不可能出现没有依赖的情况。ioc 解耦只是降低他们的依赖关系但不会消除,坐等框架把持久层对象传入业务层而不用我们自己去获取。
依赖注入作用是在使用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,来对程序进行测试,编辑后所示:
文件2 TestDI.java
5、执行程序后控制台的输出结果如图:
运行结果
从上图可以看出使用Spring容器通过UserService实现类中的say()方法,调用了UserDao实现类中的say()方法并输出了结果。这就是Spring容器属性setter注入的方式也是实际开发中最为常用的一种方式。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
面向对象是什么?有哪些特征?
提起Java,大家都知道它是一门典型的面向对象的编程语言。但是对于面向对象,可能还有许多人并不清楚。那么面向对象是什么?有哪些特征呢?本文就来带大家好好认识一下面向对象。面向对象是一种软件的开发方法,它的特征归纳起来就是三点,即封装、继承和多态。下面是关于面向对象的深入介绍:
5462
2019-10-31 10:10:10
具备JavaWeb开发能力需要掌握哪些知识?
具备JavaWeb开发能力需要掌握哪些知识?首先Java基础语法是基础,另外大家对于MySQL、JDBC、HTML和CSS、JavaScript、BootStrap、XML、Tomcat、Servlet和HTTP请求协议、Request和Response、Cookie和Session、JSP,EL和JSTL等等知识必须要熟练掌握,这样才能基本具备JavaWeb开发能力。
5174
2019-11-01 14:17:19
Java对象内存分配过程如何保证线程安全?
Java一门面向对象的语言,在Java中使用的对象都需要被创建出来,在Java中创建一个对象的方法有很多种,但对象在创建过程中都需要进行内存分配。Java对象内存分配过程保证线程安全,对象的内存分配过程就必须进行同步控制。
5361
2020-03-17 15:08:17
如何学习灵活运用Spring框架?
对程序员来讲,深入掌握并灵活运用Spring框架,是进军大厂、获得更好职业发展必须跨过的一道难关。那么,如何学习灵活运用Spring框架呢?本文将推荐你看看博学谷的《Spring高级之注解驱动开发详解》免费课程,该课程不仅脉络清晰,且兼具深度广度,下面我们来看一下课程详情。
5285
2020-07-13 11:31:04
热门的Java开源项目工具有哪些?
对于程序员来讲,在工作中选择适合的项目开发框架可以大大的提高工作效率,今天这里就介绍一些热门的Java开源项目工具:JimuReport、dolphinscheduler、sa-token、Signal-Server、soul、Arthas、kafka、Seata、miaosha、Rocketmq、Nacos等。
3914
2021-05-10 14:06:55