当前位置: 首页 > news >正文

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使用&#xff1a; 准备&#xff1a; 1.Dao层&#xff08;接口&#xff09;&#xff1a; public interface UserDao {public void save(); } 1.1 Dao层&#xff08;实现类&#xff09;&#xff1a; public class UserDaoIim implements UserDao {Overridepublic vo…...

相同的树LeetCode

100. 相同的树 - 力扣&#xff08;LeetCode100. 相同的树 - 力扣&#xff08; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 /*** Definition…...

Vue中如何抽取部分代码到单独的ts文件

Vue中如何抽取部分代码到单独的ts文件 本文代码基于 简单示例 这段代码&#xff0c;是比较通用的代码&#xff0c;我想抽取成一个ts文件&#xff0c;来供其他地方调用。 const groupData reactive({groupList:[] as Array<GroupV2Response>,current:{} as GroupV2Re…...

山东齐鲁文化名人颜廷利:朱郭有文才,曲高‘菏’寡星光路

山东齐鲁文化名人颜廷利教授表示&#xff0c;朱郭&#xff08;谐音‘祖国’&#xff09;有文才&#xff0c;《曲高‘菏’寡》星光路… 山东菏泽歌手朱之文在2011年凭借一首《滚滚长江东逝水》一夜成名&#xff0c; 十多年之后的今天&#xff0c;菏泽市网络红人郭有才靠一首《诺…...

嵌入式学习70-复习(wireshark使用和http协议)

知识零碎&#xff1a; ssize_t 头文件&#xff1a;<sys/types.h> 有符号整型 --------------------------------------------------------------------------------------------------------------------------------- wireshark 1.sudo wireshark 2.选择 any &…...

idea配置MySQL提示

点击sql语句&#xff0c;然后再选择show context actions 然后再选择Inject language or reference 然后再选择MySQL 然后我们会发现sql语句变颜色了 如果表是红色 那么需要我们连接mysql的对于的数据库...

如何利用AI生成答辩PPT?笔灵AI答辩PPT,智能识别关键点

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…...

速盾:怎么设置cdn加速小程序图片?

小程序是一种基于微信平台的应用程序&#xff0c;为了提升小程序的用户体验&#xff0c;我们可以通过设置CDN&#xff08;内容分发网络&#xff09;来加速小程序中的图片加载速度。CDN是一种分布式服务&#xff0c;它将原始服务器的存储内容复制到在全球各地的缓存服务器&#…...

Android bootchart 分析启动性能工具使用

bootchart简介 bootchart 可为整个系统提供所有进程的 CPU 和 I/O 负载细分。该工具不需要重建系统映像&#xff0c;可以用作进入 systrace 之前的快速健全性检查。 1. 板端配置&#xff1a; 在Android 板端启用 bootchart&#xff0c;请运行以下命令&#xff1a; 2. Bootch…...

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代&#xff0c;盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启&#xff0c;你就能踏入一个充满梦幻奇遇的世界&#xff0c;探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台&#xff0c;它更是一个充满神秘与惊喜的宝藏库…...

如何进行并行执行的诊断与调优 —— 《OceanBase 并行执行》系列 6

在诊断并行执行问题时&#xff0c;我们可以从两个主要方面展开分析。首先&#xff0c;从整体系统层面进行考量&#xff0c;比如检查网络是否畅通、磁盘IO是否过载、CPU资源是否已用满&#xff1b;其次&#xff0c;针对具体的SQL语句进行深入剖析&#xff0c;定位问题SQL&#x…...

【Ubuntu系统hgfs共享文件夹不显示问题解决】

问题描述&#xff1a;为了实现本地物理机与虚拟机之间的文件传输&#xff0c;我们通常采用共享文件夹的方式。但是在Vmware虚拟机使用Ubuntu系统的过程中&#xff0c;由于某种特殊或意外原因&#xff0c;Ubuntu系统或发生/mnt/hgfs共享文件夹丢失不显示的问题。以下是本次问题发…...

C++的相关知识集

1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效&#xff0c;简洁&#xff0c;快速和可移植的传统。 2 起源 与c语言一样&#xff0c;c也是在贝尔实验室诞生的&#xff0c;Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…...

解决Jmeter报错 :Error generating the report: java.lang.NullPointerException

当我们在使用命令行的方式来执行jmeter 脚本的时候&#xff0c;例如 ./jmeter -n -t /opt/jmeter/script/test.jmx -Juser50 -Jtime100 -l /opt/jmeter/script/restult2.jtl 上面脚本的含义解释如下&#xff1a; -n -t 通过命令行的方式执行脚本test.jmx -Juser50 并发用户…...

QT外部库:zlib

前言 新建项目&#xff1a;pro文件中新增代码 LIBS -lz 在main.cpp函数中#include "zlib.h",如果此时运行代码提示没有找到对应的函数&#xff0c;那么就qt安装目录&#xff1a;D:\C\qt5.12.7\Tools\mingw730_64\x86_64-w64-mingw32\include&#xff08;这里是博主…...

钡铼技术BL205模块分布式IO集成应用风电场状态监测

在风力发电这一绿色能源领域&#xff0c;高效、精确的状态监测对于提升风电场运维效率、保障设备安全运行至关重要。随着工业4.0和数字化转型浪潮的推进&#xff0c;传统的监测方式已难以满足日益增长的数据处理与分析需求。钡铼技术BL205模块的出现&#xff0c;为风电场状态监…...

java博客目录

博客目录 基础知识 集合列表 List ArrayList&#xff1a; LinkedList&#xff1a; Set Map TreeMap 设计模式 单例模式&#xff1a; 工厂方法...

从零开始学习Linux(8)----自定义shell

shell从用户读入字符串“ls”&#xff0c;shell建立一个新的进程&#xff0c;然后在那个进程中运行ls程序并等待那个进程结束。然后shell读取新的一行输入&#xff0c;建立一个新的进程&#xff0c;在这个进程中运行程序&#xff0c;并等待这个进程结束。所以要写一个shell&…...

《大数据分析-数据仓库项目实战》学习笔记

目录 基本概念 数据仓库 数据仓库整体技术架构 数据仓库主题 数据集市 数据仓库的血缘关系 数据仓库元数据管理 数据仓库的指标 数据仓库维度概念 HDFS Flume Hadoop Kafka 数据仓库分层模型 Superset 即席查询 Sqoop Atlas元数据管理 项目需求描述 系统目标…...

JDK介绍

JDK是Java Development Kit的缩写&#xff0c;是Oracle公司提供的用于开发Java应用程序的开发包。它包括了Java运行环境&#xff08;Java Runtime Environment&#xff09;&#xff0c;以及一系列Java工具&#xff08;如javac、java、jdb等&#xff09;和Java基础类库&#xff…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...