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 ...
随机推荐
- nacos启动失败
报错如下: 通过第二个圈可以看出,没有发现9848端口,才想起来自己Spring Cloud Alibaba依赖对应的nacos版本是2.0.4,而启动的nacos服务却是1.x版本,才导致这个报错. ...
- [Vue warn]: Do not use built-in or reserved HTML elements as component id: text 错误的解决办法
引入的text 没用,要么注释掉,要么引用
- js原生判断数字类型
js判断数字类型汇总最近在写代码的时候,有些逻辑需要判断数字类型,等用到的时候才发现自己了解的方法不太严密,然后就决心查资料汇总了解下有哪些方法比较严密 第一种:typeof + isNaN使用typ ...
- Web框架-inoic
ionic 下载ionic 使用命令行安装npm 1.安装node.js 最后安装的目录在D:\2019-10-14\2019-11-04-2 检测nodejs安装成功? node -v 如果报错,是 ...
- 24js Number(数字)对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 403 forbidden 与 413Too Large
http://www.ccschy.com/shuma/12846.html https://blog.51cto.com/u_15127556/4543159 查的有关资料如下,最后的原因是服务器网 ...
- 【Java学习Day07】标识符
标识符 Java使用的组成部分的需要名字.类名.变量名以及方法名都被称为标识符 标识符的注意点 所有的标识符都应该以字母(A-Z或者a-z),美元符($).或者下划线(_)开始 首字符之后可以是字母( ...
- AXI 协议翻译介绍
一.介绍 Introduction 本章描述了axis协议的体系结构和协议定义的基本事务.它包含以下部分:•第1-2页关于AXI协议•第1-3页是架构•第1-7页是基本事务•第1-11页的附加功能. ...
- 关于filter_input函数
PHP: filter_input <?php $search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_ ...
- superset2 开发环境部署+阿里odps连接
引用:https://help.aliyun.com/document_detail/280392.htm https://blog.csdn.net/weixin_45684985/article/ ...