Spring的Bean标签配置IOC和依赖注入详解

目录

  • spring配置文件详解

spring配置文件详解

spring的依赖注入和控制反转梳理总结,仅供参考

/*** Bean的依赖注入:* ① 创建 UserService,UserService 内部在调用 UserDao的save() 方法* ② 将 UserServiceImpl 的创建权交给 Spring* ③ 从 Spring 容器中获得 UserService 进行操作** Bean的依赖注入分析:* ① 目前UserService实例和UserDao实例都存在与Spring容器中,*   当前的做法是在容器外部获得UserService实例和UserDao实例,然后在程序中进行结合。* ② getBean(name:"userService")获得UserService实例,*   发现UserSrvice实例内部需要UserDao实例的save()方法,*   其内部已经存在UserDao实例了,直接调用UserDao的save()方法即可* ③ 所以在UserService内部获得UserDao实例getBean(name:"userDao"),*   相当于是在Spring容器外将Dao组装到Service内部完成的操作** Bean的依赖注入概念:*   依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。*   在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。*   IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。*   那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。*   简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取** Bean的依赖注入方式:* 怎么将UserDao怎样注入到UserService内部呢?*  构造方法*  set方法** Bean的依赖注入的三种数据类型:*  普通数据类型*  引用数据类型*  集合数据类型* 除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。下面在dao中演示普通数据类型和集合数据类型的注入* @param args
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"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"><!--Bean标签基本配置  用于配置对象交由Spring 来创建。默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。基本属性:id:Bean实例在Spring容器中的唯一标识,不允许重复class:Bean的全限定名称scope:Bean标签范围配置,指对象的作用范围,取值如下:singleton 默认值,单例的当scope的取值为singleton时Bean的实例化个数:1个Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例Bean的生命周期: 对象创建:当应用加载,创建容器时,对象就被创建了 对象运行:只要容器在,对象一直活着 对象销毁:当应用卸载,销毁容器时,对象就被销毁了prototype 多例的当scope的取值为prototype时Bean的实例化个数:多个Bean的实例化时机:当调用getBean()方法时实例化Bean 对象创建:当使用对象时,创建新的对象实例 对象运行:只要对象在使用中,就一直活着 对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了request WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中session WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中global session WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当于 sessioninit-method:指定类中的初始化方法名称destroy-method:指定类中销毁方法名称factory-method:指定类中工厂方法名称propertyname:属性名称value:注入的普通属性值ref:注入的对象引用值constructor-argBean实例化三种方式: 无参构造方法实例化(最常用) 工厂静态方法实例化 工厂实例方法实例化--><!--在Spring配置文件中配置UserDaoImpl--><!--1.无参构造方法实例化 它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败--><!--<bean id="userDao" class="com.example.ioc.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"/>--><!--2.工厂静态方法实例化,工厂的静态方法返回Bean实例--><!--<bean id="userDao" class="com.example.ioc.factory.StaticFactory" factory-method="getUserDao"/>--><!--3.工厂实例方法实例化,工厂的非静态方法返回Bean实例spring创建factory工厂对象从factory工厂对象中的getUserDao方法获取指定的userDao返回的UserDaoImpl对象--><!--<bean id="factory" class="com.example.ioc.factory.DynamicFactory"></bean><bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>--><!--Bean依赖注入操作:Bean的依赖注入的三种数据类型: 普通数据类型 引用数据类型① set方法注入方式1:配置Spring容器调用set方法进行注入property属性标签name:属性名称value:注入的普通属性值ref:注入的对象引用值listmapprops方式2:p命名空间注入 引入p命名空间② 构造方法注入 集合数据类型--><bean id="userDao" class="com.example.ioc.dao.impl.UserDaoImpl"><!--普通数据类型注入--><property name="username" value="zhangsan"/><property name="age" value="20"/><!--集合数据类型注入--><property name="strList"><list><value>aaa</value><value>bbb</value><value>ccc</value></list></property><property name="userMap"><map><entry key="u1" value-ref="user1"></entry><entry key="u2" value-ref="user2"></entry></map></property><property name="properties"><props><prop key="p1">ppp1</prop><prop key="p2">ppp2</prop><prop key="p3">ppp3</prop></props></property></bean><bean id="user1" class="com.example.ioc.domain.User"><property name="name" value="tom"/><property name="addr" value="beijing"/></bean><bean id="user2" class="com.example.ioc.domain.User"><property name="name" value="lucy"/><property name="addr" value="tianjin"/></bean><!--② 将 UserServiceImpl 的创建权交给 Spring--><!--<bean id="userService" class="com.example.ioc.service.impl.UserServiceImpl"/>--><!--set方法注入配置Spring容器调用set方法进行注入把userDao通过userService中的setUserDao方法注入给userServicename指的的是setUserDao中UserDao,只是要小写ref引用:指的是容器中的id--><!--<bean id="userService" class="com.example.ioc.service.impl.UserServiceImpl"><property name="userDao" ref="userDao"/></bean>--><!--set方法注入 方式2 p命名空间注入 引入p命名空间--><!--<bean id="userService" class="com.example.ioc.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>--><!--构造方法注入--><bean id="userService" class="com.example.ioc.service.impl.UserServiceImpl"><constructor-arg name="userDao" ref="userDao"></constructor-arg></bean><!--Spring容器加载外部jdbc.properties文件--><context:property-placeholder location="classpath:jdbc.properties"/><!--数据源配置--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean><!--import标签:导入其他的Spring的分文件 分模块开发实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载--><import resource="applicationContext-ioc.xml"/><import resource="applicationContext-jdbc.xml"/></beans>

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

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

相关文章

Oracle测试10046参数及打印结果

1.1 开启session sql trace alter session set tracefile_identifier10046; alter session set timed_statistics true; --默认是true alter session set statistics_levelall; --实例级别设置需要注意&#xff0c;会消耗大量的CPU alter session set max_…

《关于进一步优化重点文旅场所支付服务 提升支付便利性的通知》发布

为贯彻党中央、国务院决策部署&#xff0c;落实《国务院办公厅关于进一步优化支付服务 提升支付便利性的意见》要求&#xff0c;近日&#xff0c;中国人民银行、文化和旅游部、国家外汇管理局和国家文物局联合印发《关于进一步优化重点文旅场所支付服务 提升支付便利性的通知》…

【算法】二分算法题

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 704. 二分查找1.1 分析1.2 代码 2. 34. 在排序数组中查找元素的第一个和最后一个位置2.1 分析2.2 代码 3. 35. 搜索插入位置3.1 分析3.2 代码 4. 852. 山脉数组的峰顶索引4.1 分析4.2 代码 5. 153. 寻找旋转排序数组中…

程序员面试经典——01.01. 判定字符是否唯一

01.01. 判定字符是否唯一 已解答 简单 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true限制&#xff1a; 0 < len(s) &…

蓝桥杯简单STL

目录 vector vector定义 vector访问 常用函数 size() ​编辑 push_back(num) pop_back() clear 迭代器&#xff08;iterator) 迭代器定义 遍历数组示例 insert(it, element) erase(it) 标准模板库--STL&#xff0c;它包含了多种预定义的容器、算法和迭代器&…

联想电脑开启虚拟化失败,开启虚拟化却提示还没有开启虚拟化

安装虚拟机的时候&#xff0c; 电脑要开启虚拟化&#xff0c; Intel VT&#xff0c; 去BIOS开启了&#xff0c; 但是依然报错&#xff0c;说虚拟化处于禁用状态。 解决方案&#xff1a; 去联想官方&#xff0c;下载BIOS更新包&#xff0c;更新BIOS。 更新文档&#xff1a; 联…

Harmony鸿蒙南向驱动开发-DAC

DAC&#xff08;Digital to Analog Converter&#xff09;是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备。 DAC模块支持数模转换的开发。它主要用于&#xff1a; 作为过程控制计算机系统的输出通道&#xff0c;与执行器相连&#xff0c;实现对生产过程的自…

MySQL数据库 数据库基本操作(四):表的增删查改(下)

1. 联合查询 注:联合查询是面试中的重点,只要考到sql,大多数情况下都考的是联合查询,而且联合查询也是我们学习中的难点. 1.1 笛卡尔积 在实际开发中,数据往往来自不同的表,所以要多表联合查询.多表查询是对多张表的数据笛卡尔积. 它们是两张表的各行数据通过全排列得到的. …

基于SSM+Jsp+Mysql的高校毕业设计管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

秋招复习笔记——八股文部分:操作系统

笔试得刷算法题&#xff0c;那面试就离不开八股文&#xff0c;所以特地对着小林coding的图解八股文系列记一下笔记。 这一篇笔记是图解系统的内容。 硬件结构 CPU执行程序 计算机基本结构为 5 个部分&#xff0c;分别是运算器、控制器、存储器、输入设备、输出设备&#xf…

轻量的 WebHook 工具:歪脖虎克

本篇文章聊聊轻量的网络钩子&#xff08;WebHook&#xff09;工具&#xff1a;歪脖虎克。 写在前面 这是一篇迟到很久的文章&#xff0c;在 21 年和 22 年的时候&#xff0c;我分享过两篇关于轻量的计划任务工具 Cronicle 的文章&#xff1a;《轻量的定时任务工具 Cronicle&a…

运筹学基础(六)列生成算法(Column generation)

文章目录 前言从Cutting stock problem说起常规建模Column generation reformulation 列生成法核心思想相关概念Master Problem (MP)Linear Master Problem (LMP)Restricted Linear Master Problem (RLMP)subproblem&#xff08;核能预警&#xff0c;非常重要&#xff09; 算法…

智能编程助手CodeGeeX使用评测

CodeGeeX是一款基于大模型的智能编程助手&#xff0c;它可以实现代码的生成与补全&#xff0c;自动为代码添加注释&#xff0c;不同编程语言的代码间实现互译以及针对技术和代码问题的智能问答功能。帮助开发者显著提高工作效率&#xff0c;CodeGeeX支特1OO种编程语言&#xff…

kvm基础命令

前言 一、基础命令 1.虚拟机查看 2.虚拟机开启与关闭 3.虚拟机删除 4.查看虚拟机的配置 5.配置文件重定向 6.命令行登录虚拟机 二、调整虚拟机磁盘大小 三、虚拟机创建快照 四、virsh console报错 总结 前言 今天我们分享一下如何使用kvm基础命令。 一、基础命令 1.虚拟机查看…

杨笛一新作:社恐有救了,AI大模型一对一陪聊,帮i人变成e人

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站ai人工智能工具 更多资源欢迎关注 在社交活动中&#xff0c;大语言模型既可以是你的合作伙伴&#xff08;partner&#xff09;&#xff0…

MySQL-用户与权限管理:用户管理、权限管理、角色管理

用户与权限管理 用户与权限管理1.用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其它用户密码 2. 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 访问控制连接核实阶段请求核实阶段 3. 角色管理…

Redis 八种常用数据类型常用命令和应用场景

5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zset&#xff08;有序集合&#xff09;。 3 种特殊数据类型&#xff1a;HyperLogLog&#xff0…

【git】checkout origin/xxx 出现 detached HEAD问题

git 检出远程分支出现Head分离的是什么原因导致的呢&#xff1f;&#xff1f; 因为Head指向了origin的一个commit, 但是这个origin分支你的本地又没有&#xff0c;也就是说你本地没有追踪这个分支&#xff0c;那就要track一下 git checkout -h 看一下有没有追踪的命令 果不其…

使用asammdf中把mdf转成dataframe时发现一个问题

今天 在用asammdf包进行mf4文件解析及转换的过程中发现一个问题&#xff0c;部分数据在调用df mdf.to_dataframe()后&#xff0c;df的数据量与mdf的不一致&#xff0c;转换后的数据要少一些&#xff0c;之前其实也遇到过这个问题&#xff0c;但是 一直没有着手研究&#xff0…

服务器开发 Socket 相关函数

Socket 函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol)domain: AF_INET 这是大多数用来产生 socket 的协议&#xff0c;使用TCP或UDP来传输&#xff0c;用IPv4的地址 AF_INET6 与上面类似&#xff0c;不过…