bean依赖注入三种方式
bean依赖注入的三种方式如下:
1、构造方法注入
2、set方法注入
3、P命名空间注入
此处演示的项目结构如下:

方法一: 构造方法注入
UserDaoImpl.java
public class UserDaoImpl implements IUserDao {
@Override
public void save() {
System.out.println("save方法执行成功...");
}
}
UserServiceImpl.java
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public UserServiceImpl(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
xmlns:p="http://www.springframework.org/schema/p"> <!--构造方法注入-->
<bean id="userDao" class="com.hy.dao.impl.UserDaoImpl" />
<bean id="userService" class="com.hy.service.impl.UserServiceImpl">
<constructor-arg name="userDao" ref="userDao" />
</bean> </beans>
TestDependencyInjection.java
public class TestDependencyInjection {
/**
* 方式一、构造方法注入
*/
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserService userService = (IUserService) applicationContext.getBean("userService");
userService.save();
}
}
输出结果

UserDao.java和TestDependencyInjection.java代码一致,下面的方法二和方法三省略此处
方法二、set方法注入
UserServiceImpl.java
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
applicationContext.xml
<bean id="userDao" class="com.hy.dao.impl.UserDaoImpl" />
<bean id="userService" class="com.hy.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao" />
</bean>
其中property标签中的name属性值为UserServiceImplz类中的userDao字段
方法三:P命名空间注入(原理也是set方法注入)
applicationContext.xml首先引入P命名空间
xmlns:p="http://www.springframework.org/schema/p"
UserServiceImpl.java
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void save() {
userDao.save();
}
}
applicationContext.xml
<bean id="userDao" class="com.hy.dao.impl.UserDaoImpl" />
<bean id="userService" class="com.hy.service.impl.UserServiceImpl" p:userDao="userDao" p:userDao-ref="userDao" />
详细代码地址如下:https://gitee.com/duy123456/dependency-injection
bean依赖注入三种方式的更多相关文章
- Spring依赖注入三种方式详解
在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...
- spring依赖注入三种方式
一.构造器注入 构造器注入是在程序中实现构造器,可以注入任意类型,如自定义类,集合,String等,注:构造器所有有final修饰的变量都必须在构造方法中注入. 二.设值注入(setter方式注入) ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 浅谈Spring解决循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...
- Spring 循环依赖的三种方式(三级缓存解决Set循环依赖问题)
本篇文章解决以下问题: [1] . Spring循环依赖指的是什么? [2] . Spring能解决哪种情况的循环依赖?不能解决哪种情况? [3] . Spring能解决的循环依赖原理(三级缓存) 一 ...
- Solon 开发,四、Bean 扫描的三种方式
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- 一篇关于spring ioc 依赖注入3种方式的文章引用
今天看到一篇spring ioc 容器依赖注入3种方式的文章,为了方便后面的复习,在此引用别人的文章,查看请戳我.
- Spring bean管理器 bean实例化的三种方式
bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...
- 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】
Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...
随机推荐
- C3861: “CoInitialize”“CoUninitialize”: 找不到标识符
error C3861: "CoInitialize": 找不到标识符error C3861: "CoUninitialize": 找不到标识符 包含头文件和链 ...
- c# Winform 缓动动画
一.定义缓动动画类public class AnimationHelper { Timer animationTimer = new Timer(); double velocity = 0.0; P ...
- ubuntu亲测安装opencv和成功解决Makefile:160: recipe for target 'all' failed make: *** [all] Error 2
1.因为项目需要,我安装的是opencv3.0.0,从github上面下载的opencv包 git clone https://github.com/Itseez/opencv.git git clo ...
- Neural Network模型复杂度之Dropout - Python实现
背景介绍 Neural Network之模型复杂度主要取决于优化参数个数与参数变化范围. 优化参数个数可手动调节, 参数变化范围可通过正则化技术加以限制. 本文从优化参数个数出发, 以dropout技 ...
- Hadoop 设置静态IP、关闭防火墙
设置静态IP [root@localhost ~]# cd /etc[root@localhost etc]# cd sysconfig[root@localhost sysconfig]# cd n ...
- Java Swing 禁止黏贴动作
碰到一个需求,不让复制黏贴. 可考的方法有:1 重写JTextField paste 函数 2 删除组件ActionMap中与CTRL + V按键相关的操作 因为JTextField 已经被封装 ...
- 【EBS】总账YTD\PTD等概念
PTD 余额是指给定期间账户中的净活动.周期通常等于一个月. YTD 余额是指账户从时间开始到给定期间结束的净活动. 例如 假设您在 1 月 15 日声明了一项业务.您在 1 月 15 日从现金账户中 ...
- Django-django-celery的配置
1.安装django-celery pip install django-celery 2.添加配置 demos/demos/settings.py(我的项目名为demos,这里只是示范,切勿搞混 ...
- ConvTranspose的output_padding问题
当stride>=2时,反向传播,由dy, w得到dx的时候,dx的形状不唯一. 例如input_shape (7,7)或者(8,8)在kernel(3,3)上,以stride=2进行卷积, 最 ...
- httpclint的传值和访问https
一.StringContent与FormUrlEncodedContent 可参考这篇文章写的非常好: https://blog.csdn.net/lxrj2008/article/details/7 ...