spring基础使用(案例)
基于xml使用:
准备:
1.Dao层(接口):
public interface UserDao {public void save();
}
1.1 Dao层(实现类):
public class UserDaoIim implements UserDao {@Overridepublic void save() {System.out.println("save");}
}
2.Service层(接口):
public interface UserService {public void save();
}
2.1 Service层(实现类):
public class UserServiceImp implements UserService {private UserDao userDao;@Overridepublic void save() {userDao.save();//调用dao层方法System.out.println("Service_save");}public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}
}
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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><bean id="UserDao" class="UserDaoIim的全限定名"></bean><bean id="UserService" class="UserServiceImp的全限定名"><property name="userDao" ref="UserDao"></property>
<!-- name="userDao":UserServiceImp的属性 ref="UserDao":中指上面beanid指--></bean>
</beans>
测试使用:
public class MyTest {private UserDao userDao;private UserService userService;@Testpublic void springs(){
// UserDao userDao = new UserDaoIim();
// userDao.save();ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");//文件路径,我放在resources根下。
// userDao = (UserDao) applicationContext.getBean("UserDao");//id名
// userDao.save();userService = (UserService) applicationContext.getBean("UserService");//id名userService.save();}
}
三种方式获取bean对象:
静态工厂模式获取:
静态工厂类(该类用到的实现类同上):
public class StaticFactory {public static UserDao getUserDao() {System.out.println("StaticFactory UserDao");return new UserDaoIim();}
}
xml关键配置:
<!-- 静态工厂获取bean。-->
<bean id="UserDao" class="com.dt.factory.StaticFactory" factory-method="getUserDao"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
实例工厂模式获取:
实例工厂类(该类用到的实现类同上):
public class InstanceFactory {public UserDao getUserDao() {System.out.println("Instance UserDao");return new UserDaoIim();}
}
xml关键配置:
<!-- 实例工厂获取实例-->
<bean id="instanceFactory" class="com.dt.factory.InstanceFactory"></bean>
<bean id="UserDao" factory-bean="instanceFactory" factory-method="getUserDao"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
自定义工厂获取bean:
工厂类:
public class MyFactoryBean implements FactoryBean {public Object getObject() throws Exception {System.out.println("FactoryBean getObject");return new UserDaoIim();}public Class<?> getObjectType() {return null;}
}
xml关键配置:
<!--FactoryBean 获取实例-->
<bean id="UserDao" class="com.dt.factory.MyFactoryBean"></bean>
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userDao = (UserDao) applicationContext.getBean("UserDao");
userDao.save();}
}
赋值(引用类型用ref,基本数据类型用value):
实现类(赋值给userDao和number)(该类其他代码不变):
private UserDao userDao;
private Integer number;public Integer getNumber() {return number;}public void setNumber(Integer number) {this.number = number;}@Overridepublic void save() {userDao.save();System.out.println("Service_save");System.out.println(number);}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean><bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp">
<property name="userDao" ref="UserDao"></property><property name="number" value="10"></property></bean>
测试:
public class MyTest {private UserService userService;@Testpublic void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userService = (UserService) applicationContext.getBean("UserServiceImp");
userService.save();}
}
实现类(该类其他代码不变):
public UserServiceImp() {}public UserServiceImp(UserDao userDao, Integer number) {this.userDao = userDao;this.number = number;}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp"><constructor-arg name="userDao" ref="UserDao"></constructor-arg><constructor-arg name="number" value="20"></constructor-arg></bean>
测试:
public class MyTest {private UserDao userDao;private UserService userService;@Testpublic void springs(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
userService = (UserService) applicationContext.getBean("UserServiceImp");
userService.save();}
}
自动装配(实现类和测试类不变):
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<bean id="UserServiceImp" class="com.dt.service.imp.UserServiceImp" autowire="byType"></bean>
集合赋值
接口:
public interface Resource { }
实现类:
public class ResourceImp implements Resource {private String[] array;private List<String> list;private Set<String> set;private Map<String,String> map;public String[] getArray() {return array;}public void setArray(String[] array) {this.array = array;}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;}public Set<String> getSet() {return set;}public void setSet(Set<String> set) {this.set = set;}public Map<String, String> getMap() {return map;}public void setMap(Map<String, String> map) {this.map = map;}@Overridepublic String toString() {return "ResourceImp{" +"array=" + Arrays.toString(array) +", list=" + list +", set=" + set +", map=" + map +'}';}
}
xml关键配置:
<bean id="UserDao" class="com.dt.dao.imp.UserDaoIim"></bean>
<!--集合赋值--><bean id="ResourceImp" class="com.dt.service.imp.ResourceImp"><property name="array"><array><value>sing</value><value>dance</value><value>rap</value></array></property><property name="list"><list><value>list1</value><value>list2</value><value>list3</value></list></property><property name="set"><set><value>set1</value><value>set2</value><value>set3</value></set></property><property name="map"><map><entry key="key1" value="value1"></entry><entry key="key2" value="value2"></entry><entry key="key3" value="value3"></entry></map></property></bean>
测试(其他不变):
public class MyTest {@Test
public void springs(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
Resource resourceImp = (Resource) applicationContext.getBean("ResourceImp");
System.out.println(resourceImp);}
}
第三方管理(关键配置):
<bean id="名字" class="......"><property name="..." value="..."></property><property name="..." value="..."></property>
</bean>
相关文章:
spring基础使用(案例)
基于xml使用: 准备: 1.Dao层(接口): public interface UserDao {public void save(); } 1.1 Dao层(实现类): public class UserDaoIim implements UserDao {Overridepublic vo…...
相同的树LeetCode
100. 相同的树 - 力扣(LeetCode100. 相同的树 - 力扣( 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 /*** Definition…...
Vue中如何抽取部分代码到单独的ts文件
Vue中如何抽取部分代码到单独的ts文件 本文代码基于 简单示例 这段代码,是比较通用的代码,我想抽取成一个ts文件,来供其他地方调用。 const groupData reactive({groupList:[] as Array<GroupV2Response>,current:{} as GroupV2Re…...
山东齐鲁文化名人颜廷利:朱郭有文才,曲高‘菏’寡星光路
山东齐鲁文化名人颜廷利教授表示,朱郭(谐音‘祖国’)有文才,《曲高‘菏’寡》星光路… 山东菏泽歌手朱之文在2011年凭借一首《滚滚长江东逝水》一夜成名, 十多年之后的今天,菏泽市网络红人郭有才靠一首《诺…...
嵌入式学习70-复习(wireshark使用和http协议)
知识零碎: ssize_t 头文件:<sys/types.h> 有符号整型 --------------------------------------------------------------------------------------------------------------------------------- wireshark 1.sudo wireshark 2.选择 any &…...
idea配置MySQL提示
点击sql语句,然后再选择show context actions 然后再选择Inject language or reference 然后再选择MySQL 然后我们会发现sql语句变颜色了 如果表是红色 那么需要我们连接mysql的对于的数据库...
如何利用AI生成答辩PPT?笔灵AI答辩PPT,智能识别关键点
很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…...
速盾:怎么设置cdn加速小程序图片?
小程序是一种基于微信平台的应用程序,为了提升小程序的用户体验,我们可以通过设置CDN(内容分发网络)来加速小程序中的图片加载速度。CDN是一种分布式服务,它将原始服务器的存储内容复制到在全球各地的缓存服务器&#…...
Android bootchart 分析启动性能工具使用
bootchart简介 bootchart 可为整个系统提供所有进程的 CPU 和 I/O 负载细分。该工具不需要重建系统映像,可以用作进入 systrace 之前的快速健全性检查。 1. 板端配置: 在Android 板端启用 bootchart,请运行以下命令: 2. Bootch…...
一键开启,盲盒小程序里的梦幻奇遇
在这个充满惊喜与未知的数字时代,盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启,你就能踏入一个充满梦幻奇遇的世界,探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台,它更是一个充满神秘与惊喜的宝藏库…...
如何进行并行执行的诊断与调优 —— 《OceanBase 并行执行》系列 6
在诊断并行执行问题时,我们可以从两个主要方面展开分析。首先,从整体系统层面进行考量,比如检查网络是否畅通、磁盘IO是否过载、CPU资源是否已用满;其次,针对具体的SQL语句进行深入剖析,定位问题SQL&#x…...
【Ubuntu系统hgfs共享文件夹不显示问题解决】
问题描述:为了实现本地物理机与虚拟机之间的文件传输,我们通常采用共享文件夹的方式。但是在Vmware虚拟机使用Ubuntu系统的过程中,由于某种特殊或意外原因,Ubuntu系统或发生/mnt/hgfs共享文件夹丢失不显示的问题。以下是本次问题发…...
C++的相关知识集
1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效,简洁,快速和可移植的传统。 2 起源 与c语言一样,c也是在贝尔实验室诞生的,Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…...
解决Jmeter报错 :Error generating the report: java.lang.NullPointerException
当我们在使用命令行的方式来执行jmeter 脚本的时候,例如 ./jmeter -n -t /opt/jmeter/script/test.jmx -Juser50 -Jtime100 -l /opt/jmeter/script/restult2.jtl 上面脚本的含义解释如下: -n -t 通过命令行的方式执行脚本test.jmx -Juser50 并发用户…...
QT外部库:zlib
前言 新建项目:pro文件中新增代码 LIBS -lz 在main.cpp函数中#include "zlib.h",如果此时运行代码提示没有找到对应的函数,那么就qt安装目录:D:\C\qt5.12.7\Tools\mingw730_64\x86_64-w64-mingw32\include(这里是博主…...
钡铼技术BL205模块分布式IO集成应用风电场状态监测
在风力发电这一绿色能源领域,高效、精确的状态监测对于提升风电场运维效率、保障设备安全运行至关重要。随着工业4.0和数字化转型浪潮的推进,传统的监测方式已难以满足日益增长的数据处理与分析需求。钡铼技术BL205模块的出现,为风电场状态监…...
java博客目录
博客目录 基础知识 集合列表 List ArrayList: LinkedList: Set Map TreeMap 设计模式 单例模式: 工厂方法...
从零开始学习Linux(8)----自定义shell
shell从用户读入字符串“ls”,shell建立一个新的进程,然后在那个进程中运行ls程序并等待那个进程结束。然后shell读取新的一行输入,建立一个新的进程,在这个进程中运行程序,并等待这个进程结束。所以要写一个shell&…...
《大数据分析-数据仓库项目实战》学习笔记
目录 基本概念 数据仓库 数据仓库整体技术架构 数据仓库主题 数据集市 数据仓库的血缘关系 数据仓库元数据管理 数据仓库的指标 数据仓库维度概念 HDFS Flume Hadoop Kafka 数据仓库分层模型 Superset 即席查询 Sqoop Atlas元数据管理 项目需求描述 系统目标…...
JDK介绍
JDK是Java Development Kit的缩写,是Oracle公司提供的用于开发Java应用程序的开发包。它包括了Java运行环境(Java Runtime Environment),以及一系列Java工具(如javac、java、jdb等)和Java基础类库ÿ…...
Bootstrap5 轮播详解
Bootstrap5 轮播详解 Bootstrap 5 是一个流行的前端框架,它提供了丰富的组件和工具,帮助开发者快速构建响应式网站。在Bootstrap 5中,轮播组件(Carousel)得到了极大的改进,使得创建美观、互动性强的轮播图变得更加简单。本文将详细介绍Bootstrap 5轮播组件的使用方法、配…...
e1547:重新定义e621浏览体验的现代化客户端解决方案
e1547:重新定义e621浏览体验的现代化客户端解决方案 【免费下载链接】e1547 A sophisticated e621 browser 项目地址: https://gitcode.com/gh_mirrors/e1/e1547 你是否曾在浏览e621社区时感到界面混乱、功能分散?是否期望一个能够提供个性化内容…...
设备预测性维护模型构建方法
构建设备预测性维护模型需要结合数据采集、算法选择和实际应用场景。以下是核心步骤:数据采集与预处理 设备运行数据是模型的基础,需通过传感器、SCADA系统或IoT设备采集振动、温度、电流等参数。原始数据通常包含噪声,需进行滤波、归一化和缺…...
2026届学术党必备的十大降重复率神器解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 减少AIGC率的关键要点是全力去降低文本里那些能够被分辨出来的机器生成特性 ,这…...
PHP中比较两个对象的几种方式小结
在PHP中,比较两个对象并不是一件直接明了的事情,因为对象之间的比较通常依赖于它们的属性和状态,而这些属性和状态可能非常复杂且多样化。PHP提供了几种方式来比较对象,但每种方式都有其特定的用途和限制。1. 使用和运算符在PHP中…...
Boss-Key老板键:三步打造你的办公隐私保护终极方案
Boss-Key老板键:三步打造你的办公隐私保护终极方案 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 还在为突然的办公室巡查而手…...
5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南
5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在虚拟化技术日益普及的今天,许多开发者和技术爱好者希望在非苹果硬件…...
Amundsen多租户架构:企业级数据隔离的终极解决方案
Amundsen多租户架构:企业级数据隔离的终极解决方案 【免费下载链接】amundsen Amundsen is a metadata driven application for improving the productivity of data analysts, data scientists and engineers when interacting with data. 项目地址: https://git…...
Onekey:Steam游戏清单获取的自动化解决方案
Onekey:Steam游戏清单获取的自动化解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在游戏资源管理领域,获取和管理Steam游戏清单一直是一项技术门槛较高的任务。…...
如何高效管理空洞骑士模组:5个专业技巧的完整指南
如何高效管理空洞骑士模组:5个专业技巧的完整指南 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 还在为空洞骑士模组安装的复杂流程而烦恼吗&#…...
