Spring的依赖注入(DI)

1.DI

概述:DI(Dependency Injection)依赖注入,在Spring创建对象的同时,为其属性赋值,称之为依赖注入。

1.1构造函数注入

顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让spring框架来为我们注入。具体代码如下:

1.1.1service

package com.by.service;import com.by.dao.UserDao;
import com.by.dao.UserDaoImpl;public class UserServiceImpl implements UserService{private UserDao userDao;private String msg;public UserServiceImpl() {}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void setMsg(String msg) {this.msg = msg;}public UserServiceImpl(UserDao userDao, String msg) {this.userDao = userDao;this.msg = msg;}@Overridepublic void adduser() {System.out.println(userDao+"============"+msg);userDao.adduser();}
}

1.1.2applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--2、把对象交给spring来创建id:给对象在容器中提供一个唯一标识。用于获取对象class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数--><bean id="userDao" class="com.by.dao.UserDaoImpl"></bean><bean id="userService" class="com.by.service.UserServiceImpl">
<!--    <bean id="userService" class="com.by.service.UserServiceImpl" scope="prototype"-->
<!--          init-method="init" destroy-method="destroy" autowire="byType">--><!--    构造器注入要求:类中需要提供一个对应参数列表的构造函数。标签:constructor-arg==给谁赋值:==index:指定参数在构造函数参数列表的索引位置name:指定参数在构造函数中的名称==赋什么值:==value:它能赋的值是基本数据类型和String类型ref:它能赋的值是其他bean类型,也就是说,必须得是在配置文件中配置过的bean--><constructor-arg name="userDao" ref="userDao"></constructor-arg><constructor-arg index="1" value="我真帅"></constructor-arg></bean></beans>

 1.1.3测试

package com.by.web;import com.by.dao.UserDao;
import com.by.service.UserService;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.ContextResource;public class Client {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");/*** 测试di*/UserService userService = context.getBean("userService", UserService.class);userService.adduser();}
}

1.1.4结果

1.2set方法注入 

顾名思义,就是在类中提供需要注入成员的set方法。具体代码如下:  

 1.2.1service

package com.by.service;import com.by.dao.UserDao;
import com.by.dao.UserDaoImpl;public class UserServiceImpl implements UserService{private UserDao userDao;private String msg;public UserServiceImpl() {}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void setMsg(String msg) {this.msg = msg;}public UserServiceImpl(UserDao userDao, String msg) {this.userDao = userDao;this.msg = msg;}@Overridepublic void adduser() {System.out.println(userDao+"============"+msg);userDao.adduser();}
}

1.2.2applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--2、把对象交给spring来创建id:给对象在容器中提供一个唯一标识。用于获取对象class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数--><bean id="userDao" class="com.by.dao.UserDaoImpl"></bean><bean id="userService" class="com.by.service.UserServiceImpl">
<!--           set注入==给谁赋值:==name:找的是类中set方法后面的部分==赋什么值:==value:它能赋的值是基本数据类型和String类型ref:它能赋的值是其他bean类型,也就是说,必须得是在配置文件中配置过的bean--><property name="userDao" ref="userDao"></property><property name="msg" value="我今年发大财"></property></bean></beans>

  1.2.3测试

package com.by.web;import com.by.dao.UserDao;
import com.by.service.UserService;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.ContextResource;public class Client {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");/*** 测试di*/UserService userService = context.getBean("userService", UserService.class);userService.adduser();}
}

1.2.4结果

 

1.3自动注入

 不用在配置中 指定为哪个属性赋值,由spring自动根据某个 "原则" ,在工厂中查找一个bean并为属性注入值。具体代码如下:

1.3.1service

package com.by.service;import com.by.dao.UserDao;
import com.by.dao.UserDaoImpl;public class UserServiceImpl implements UserService{private UserDao userDao;private String msg;public UserServiceImpl() {}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void setMsg(String msg) {this.msg = msg;}public UserServiceImpl(UserDao userDao, String msg) {this.userDao = userDao;this.msg = msg;}@Overridepublic void adduser() {System.out.println(userDao+"============"+msg);userDao.adduser();}
}

1.3.2applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--2、把对象交给spring来创建id:给对象在容器中提供一个唯一标识。用于获取对象class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数--><bean id="userDao" class="com.by.dao.UserDaoImpl"></bean><bean id="userService" class="com.by.service.UserServiceImpl" autowire="byType"></bean></beans>

 1.3.3测试

package com.by.web;import com.by.dao.UserDao;
import com.by.service.UserService;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.ContextResource;public class Client {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");/*** 测试di*/UserService userService = context.getBean("userService", UserService.class);userService.adduser();}
}

1.3.4结果

 1.4注入集合类型的属性

顾名思义,就是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。我们这里介绍注入数组,List,Set,Map。具体代码如下:

1.4.1service

package com.zhy.pojo;import java.util.*;public class Student {private String name;private Address address;private String[] books;private List<String> hobbys;private Map<String,String> card;private Set<String> games;private String wife;private Properties info;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", address=" + address.toString() +", books=" + Arrays.toString(books) +", hobbys=" + hobbys +", card=" + card +", games=" + games +", wife='" + wife + '\'' +", info=" + info +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public String[] getBooks() {return books;}public void setBooks(String[] books) {this.books = books;}public List<String> getHobbys() {return hobbys;}public void setHobbys(List<String> hobbys) {this.hobbys = hobbys;}public Map<String, String> getCard() {return card;}public void setCard(Map<String, String> card) {this.card = card;}public Set<String> getGames() {return games;}public void setGames(Set<String> games) {this.games = games;}public String getWife() {return wife;}public void setWife(String wife) {this.wife = wife;}public Properties getInfo() {return info;}public void setInfo(Properties info) {this.info = info;}
}

1.4.2applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--1、注意:要导入schema约束-->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="address" class="com.zhy.pojo.Address"><property name="address" value="驻马店"></property></bean><bean id="student" class="com.zhy.pojo.Student">
<!--        第一种!普通注入,value--><property name="name" value="赵玉真"></property>
<!--        第二种Bean注入--><property name="address" ref="address"></property><property name="books"><array><value>西游记</value><value>水浒传</value><value>红楼梦</value><value>三国演义</value></array></property><property name="hobbys"><list><value>听歌</value><value>看电影</value><value>敲代码</value></list></property><property name="card"><map><entry key="身份证" value="111111222222333333"></entry><entry key="银行卡" value="444444444444777777"></entry></map></property><property name="games"><set><value>LOL</value><value>COC</value><value>BoB</value></set></property><property name="wife"><null></null></property><property name="info"><props><prop key="sex">男</prop><prop key="ID">20231228</prop><prop key="username">root</prop><prop key="password">123456</prop><prop key="role">懂事早</prop></props></property></bean>
</beans>

 1.4.3测试

import com.zhy.pojo.Student;
import com.zhy.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Student student = (Student) context.getBean("student");System.out.println(student.toString());/*** Student{name='赵玉真', address=Address{address='驻马店'},* books=[西游记, 水浒传, 红楼梦, 三国演义],* hobbys=[听歌, 看电影, 敲代码],* card={身份证=111111222222333333, 银行卡=444444444444777777},* games=[LOL, COC, BoB],* wife='null',* info={ID=20231228, password=123456, sex=男, username=root, role=懂事早}}*/}
}

 1.4.4结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/322919.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS——软件定时器知识总结及其实战

1.软件定时器概念 是指具有定时功能的软件&#xff0c;可设置定时周期&#xff0c;当指定时间到达后要调用回调函数&#xff08;也称超时函数&#xff09;&#xff0c;用户在回调函数中处理信息。 2 软件定时器使用特点 1&#xff09;如果要使能软件定时器&#xff0c;需将c…

防浪涌TVS:电子设备的保护盾?|深圳比创达电子

在电子设备日益普及的今天&#xff0c;我们经常会听到设备因电压波动或突发浪涌而损坏的情况。那么&#xff0c;有没有一种方式可以保护我们的设备免受这些意外伤害&#xff1f;答案就是“防浪涌TVS(Transient Voltage Suppressor)”。但它是什么&#xff1f;它如何工作&#x…

推荐一款加速器,也可加速github

地址https://github.com/BeyondDimension/SteamTools

docker 部署haproxy cpu占用特别高

在部署mysql 主主高可用时&#xff0c;使用haproxy进行负载&#xff0c;在服务部使用的情况下发现服务器cpu占比高&#xff0c;负载也高&#xff0c;因此急需解决这个问题。 1.解决前现状 1.1 部署配置文件 cat > haproxy.cfg << EOF globalmaxconn 4000nbthrea…

小白入门基础 - spring Boot 入门

1.简介 spring Boot是为了简化java的开发流程而构建的&#xff0c;即使是使用springMVC框架&#xff0c;也依然需要大量配置和依赖导入&#xff0c; 这无疑是繁琐的&#xff0c;spring Boot采用了”习惯由于配置“的原则&#xff0c;进行一键化部署&#xff0c;这样极大…

HTTP基础知识总结

目录 一、什么是HTTP&#xff1f; 二、与HTTP有关的协议 三、HTTP请求特征 四、HTTP组成格式 五、HTTP标头 1.通用标头 2.实体标头 3.请求标头 4.响应标头 六、HTTP状态码分类 我们在日常测试过程中&#xff0c;也可以通过浏览器F12简单定位是前端问题还是后端问题&a…

Android kotlin build.gradle.kts配置

1. 添加 maven 仓库 1. 1. settings配置 1. 1.1. settings.gradle repositories {maven {url https://maven.aliyun.com/repository/public/}mavenCentral() }1. 1.2. settings.gradle.kts repositories {maven {setUrl("https://maven.aliyun.com/repository/public/…

Linux中 /etc/sysconfig/network-scripts/ifcfg-<interface> 网络接口配置 详解 看这一篇够用

CSDN 成就一亿技术人&#xff01; 今天就来讲讲Linux中的网络配置详解 CSDN 成就一亿技术人&#xff01; 在 Linux 系统中&#xff0c;/etc/sysconfig/network-scripts 目录包含用于配置网络接口的脚本和配置文件。这些文件由 NetworkManager 服务使用来启动、停止和管理网络…

python入门,list列表详解

目录 1.list的定义 2.index查找某元素的下标 3.修改 ​编辑 4.插入 ​编辑 5.追加元素 1.append,追加到尾部 2.extend,追加一批元素 ​编辑 6.删除元素 1.del 列表[下标] 2.列表.pop(下标) 3.列表.remove(元素) 7.清空列表 8.统计某一元素在列表内的数量 9.计算…

【后端已完成,前端更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;一&#xff09;技术可行性&#xff1a; &#xff08;二&#xff09;经济可行性&#xff1a; &#xff08;三&#xff09;社会可行性&#xff1a; &#xff08;2&#xff09;需求描述 功能模块图 用例图&#…

基于卷积神经网络的回归分析

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络的回归分析 完整代码:卷积神经网络的回归分析(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/…

银河麒麟Kylin-Server-V10-SP3使用ISO镜像搭建本地内网YUM/DNF源cdrom/http

机房服务器安装一般是内网环境&#xff0c;需要配置本地的YUM/DNF源。本文介绍通过ISO镜像搭建内网环境的UM/DNF源 准备工作&#xff1a; 提前准备好Kylin-Server-V10-SP3的ISO镜像文件。 本机IP地址&#xff1a;192.168.40.201 镜像存放目录/data/iso/Kylin-Server-V10-SP3-Ge…