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依赖注入三种方式的更多相关文章

  1. Spring依赖注入三种方式详解

    在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...

  2. spring依赖注入三种方式

    一.构造器注入 构造器注入是在程序中实现构造器,可以注入任意类型,如自定义类,集合,String等,注:构造器所有有final修饰的变量都必须在构造方法中注入. 二.设值注入(setter方式注入) ...

  3. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  4. 浅谈Spring解决循环依赖的三种方式

    引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...

  5. Spring 循环依赖的三种方式(三级缓存解决Set循环依赖问题)

    本篇文章解决以下问题: [1] . Spring循环依赖指的是什么? [2] . Spring能解决哪种情况的循环依赖?不能解决哪种情况? [3] . Spring能解决的循环依赖原理(三级缓存) 一 ...

  6. Solon 开发,四、Bean 扫描的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  7. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

  8. 一篇关于spring ioc 依赖注入3种方式的文章引用

    今天看到一篇spring ioc 容器依赖注入3种方式的文章,为了方便后面的复习,在此引用别人的文章,查看请戳我.

  9. Spring bean管理器 bean实例化的三种方式

    bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...

  10. 【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】

    Bean实例化的三种方式 说明:通过配置文件创建对象就称为Bean实例化. 第一种:使用类的无参构造创建(重点) 实体类 package com.tyzr.ioc; public class User ...

随机推荐

  1. vue 滑动到指定位置

    在Vue中,有三种方式可以实现H5页面滑动至指定位置 方法1: //先获取目标位置距离 mounted() { this.$nextTick(() => { setTimeout(() => ...

  2. 【傻瓜式教学】apache2 管理员用户运行(php无权限问题

    apache2 管理员用户运行(php无权限问题 代码亲身试过,绝无问题 apache版本: Server version: Apache/2.4.38 (Debian) Server built: ...

  3. 004. html篇之《标签分类和嵌套规则》

    html篇之<标签分类和嵌套规则> 一.常用标签 (1) <div></div> 一个区块容器标记,可以包含图片.表格.段落等各种html元素 (2) <sp ...

  4. HBase建命名空间建表

    public class HBaseDDL { //声明一个静态属性 static public Connection conn = HBaseConnection2.conn; /** * 创建命名 ...

  5. 无锁并发,CAS等

    Unsafe

  6. js引入样式资源报错

    如上图,import这几个样式资源为什么会报错,怎么解决呢,而且那个jquery-ui之前也会报错但是现在刷新一遍他又不报错了其他的css文件报错 图片转代码服务由CSDN问答提供 功能建议   im ...

  7. webpack4从0开始构建前端单页项目(15)用clean-webpack-plugin清理构建前的目录(dist)

    clean-webpack-plugin 这个插件用来清空打包后的 dist 目录下的文件.可以避免每次打包前手动删除构建目录(dist)下的文件. 安装 clean-webpack-plugin c ...

  8. H5云图后台读写CAD文件-在线CAD,网页CAD,网页浏览编辑CAD

    说明 后台提供MxFileConvert.exe程序,它可以将CAD图纸转换成前台能加载显示的格式,程序调用方法见: https://help.mxdraw.com/?pid=32中的"如何 ...

  9. redis相关入门知识

    redis介绍:是一种基于键值对的NoSql数据库,与许多键值对数据库不同是,它可以由string,hash,list,set,zest(有序集合).Bitmaps(位图).HyperLogLog.G ...

  10. docker 安装portainer容器后,启动/Portainer 安装MySQL并开启远程访问

    启动命令: docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --nam ...