SSM --Spring 第一天

2023-05-16

1. spring概述

1.1 Spring是什么(理解)

Spring是分层的 Java SE/EE应用 full-stack(全栈的,什么都会的,管家的 ) 轻量级开源框架,以 IoC:反转控制和 AOP:面向切面编程 为内核。
sring提供了展现层 SpringMVC和持久层 Spring JDBCTemplate以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架

1.2 Spring发展历程 (了解)

Rod Johnson ( Spring 之父)2017版

1.3 Spring的优势(理解)

1. 方便解耦,简化开发
2. AOP(面向切面) 编程的支持
3. 声明式事务的支持
4. 方便程序的测试
5. 方便集成其他框架

1.4 Spring的体系结构(了解)

在这里插入图片描述

2. spring快速入门

2.1 Spring程序开发步骤

①导入 Spring 开发的基本包坐标

②编写 Dao 接口和实现类

③创建 Spring 核心配置文件

④在 Spring 配置文件中配置 UserDaoImpl

⑤使用 Spring 的 API 获得 Bean 实例

2.2 导入Spring开发的基本包坐标

<properties>
	<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<!--导入spring的context坐标,context依赖core、beans、expression-->
<dependencies> 
    <dependency>  
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
        <version>${spring.version}</version>
    </dependency>
</dependencies>

2.3 编写Dao接口和实现类

public interface UserDao {  
    public void save();
}

public class UserDaoImpl implements UserDao {  
        @Override  
        public void save() {
        	System.out.println("UserDao save method running....");
	}
}

2.4 创建Spring核心配置文件

在类路径下(resources)创建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">
</beans>

2.5 在Spring配置文件中配置UserDaoImpl

<?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">
   <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>

2.6 使用Spring的API获得Bean实例

@Test
public void test1(){
		ApplicationContext applicationContext = new  
             ClassPathXmlApplicationContext("applicationContext.xml");
            UserDao userDao = (UserDao) applicationContext.getBean("userDao");   				 
            userDao.save();
 }

3. Spring配置文件

3.1 Bean标签基本配置

作用:用于配置对象 交由Spring 来创建。

默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

基本属性:id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称

3.2 Bean标签范围配置

scope:指对象的作用范围,取值如下: ’
需要了解的就是前两个.singleton prototype
在这里插入图片描述
1)当scope的取值为singleton时

  Bean的实例化个数:1个

  Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

  Bean的生命周期:

对象创建:当应用加载,创建容器时,对象就被创建了

对象运行:只要容器在,对象一直活着

对象销毁:当应用卸载,销毁容器时,对象就被销毁了

2)当scope的取值为prototype时

  Bean的实例化个数:多个

  Bean的实例化时机:当调用getBean()方法时实例化Bean

对象创建:当使用对象时,创建新的对象实例

对象运行:只要对象在使用中,就一直活着

对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了

3.3 Bean生命周期配置

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法名称

3.4 Bean实例化三种方式

最常用的是第一种
1) 使用无参构造方法实例化
它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>

2) 工厂静态方法实例化
工厂的静态方法返回Bean实例

public class StaticFactoryBean {
    public static UserDao createUserDao(){    
    return new UserDaoImpl();
    }
}
<bean id="userDao" class="com.itheima.factory.StaticFactoryBean" 
      factory-method="createUserDao" />

3) 工厂实例方法实例化
工厂的非静态方法返回Bean实例

public class DynamicFactoryBean {  
	public UserDao createUserDao(){        
		return new UserDaoImpl(); 
	}
}
<bean id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>

3.5 Bean的依赖注入入门

①创建 UserService,UserService 内部在调用 UserDao的save() 方法

public class UserServiceImpl implements UserService {
	@Override
	public void save() {
         ApplicationContext applicationContext = new 
                 ClassPathXmlApplicationContext("applicationContext.xml");       	           UserDao userDao = (UserDao) applicationContext.getBean("userDao");	
          userDao.save();
 	}
 }

②将 UserServiceImpl 的创建权交给 Spring

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>

③从 Spring 容器中获得 UserService 进行操作

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();

3.6 Bean的依赖注入概念

依赖注入(Dependency Injection):它是 Spring 框架核心 IOC 的具体实现。

在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。

IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层仍会调用持久层的方法。

那这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取

3.7 Bean的依赖注入方式

①构造方法
创建有参构造

public class UserServiceImpl implements UserService {
@Override
public void save() {
ApplicationContext applicationContext = new 
                 ClassPathXmlApplicationContext("applicationContext.xml");       
                 UserDao userDao = (UserDao) applicationContext.getBean("userDao");    
          		 userDao.save();
    }
 }

配置Spring容器调用有参构造时进行注入

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">      		   			<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>

②set方法
在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;  
        } 
    @Override    
    public void save() {      
   		 userDao.save();
	}
}

配置Spring容器调用set方法进行注入

<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
	<property name="userDao" ref="userDao"/>
</bean>

set方法:P命名空间注入
P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中,如下: 首先,需要引入P命名空间:

xmlns:p="http://www.springframework.org/schema/p"

其次,需要修改注入方式

<bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-
 ref="userDao"/>

3.8 Bean的依赖注入的数据类型

上面的操作,都是注入的引用Bean,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。注入数据的三种数据类型
普通数据类型
引用数据类型
集合数据类型
其中引用数据类型,此处就不再赘述了,之前的操作都是对UserDao对象的引用进行注入的,下面将以set方法注入为例,演示普通数据类型和集合数据类型的注入。

Bean的依赖注入的数据类型

(1)普通数据类型的注入 <property name=" " 引号总传的是 setCompany方法== 方法名去掉get 首字母变小写后的

public class UserDaoImpl implements UserDao {
	//创建数据 ,提供数据的set 方法
    private String company;
    private int age;
    public void setCompany(String company) {
        this.company = company;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void save() {
        System.out.println(company+"==="+age);
        System.out.println("UserDao save method running....");   
    }
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    属性注入
    <property name="company" value="传智播客"></property>
    <property name="age" value="15"></property>
</bean>

(2)集合数据类型(List)的注入 property name=“strList” 传的是set方法的形参

public class UserDaoImpl implements UserDao {
	//创建集合 ,提供set方法
    private List<String> strList;
	public void setStrList(List<String> strList) {
		this.strList = strList;
	}
	public void save() {
        System.out.println(strList);
        System.out.println("UserDao save method running....");
	}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="strList">
        <list>
            <value>aaa</value>
            <value>bbb</value>
            <value>ccc</value>
        </list>
    </property>
</bean>

(3)集合数据类型(List)的注入 property name=“strList” 传的是set方法的形参

public class UserDaoImpl implements UserDao {
	//创建集合 ,提供set方法
    private List<User> userList;
	public void setUserList(List<User> userList) {
	this.userList = userList;  
 }
public void save() {
	System.out.println(userList);
	System.out.println("UserDao save method running....");
	}
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="userList">
        <list>
            <bean class="com.itheima.domain.User"/>
            <bean class="com.itheima.domain.User"/>
            <ref bean="u1"/>
            <ref bean="u2"/>       
        </list>
    </property>
</bean>

(4)集合数据类型( Map<String,User> )的注入 property name=“strList” 传的是set方法的形参

public class UserDaoImpl implements UserDao {
    private Map<String,User> userMap;
    public void setUserMap(Map<String, User> userMap) {
    this.userMap = userMap;
    }    
public void save() {      
	System.out.println(userMap);
	System.out.println("UserDao save method running....");
	}
}
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="userMap">
        <map>            
            <entry key="user1" value-ref="u1"/>
            <entry key="user2" value-ref="u2"/>
        </map>
    </property>
</bean>

(5)集合数据类型(Properties)的注入 property name=“strList” 传的是set方法的形参

public class UserDaoImpl implements UserDao {
    private Properties properties;
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
	public void save() {
		System.out.println(properties);
		System.out.println("UserDao save method running....");
	}
}
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
    <property name="properties">
        <props>
            <prop key="p1">aaa</prop>
            <prop key="p2">bbb</prop> 
            <prop key="p3">ccc</prop>
        </props>
    </property>
</bean>

3.9 引入其他配置文件(分模块开发)

实际开发中,Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大,所以,可以将部分配置拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载

<import resource="applicationContext-xxx.xml"/>

4. spring相关API

#4.1 ApplicationContext的继承体系

applicationContext:接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象

4.2 ApplicationContext的实现类

1)ClassPathXmlApplicationContext 
  	它是从类的根路径下加载配置文件 推荐使用这种
2)FileSystemXmlApplicationContext 
 	 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
3)AnnotationConfigApplicationContext
  	当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

4.3 getBean()方法使用

public Object getBean(String name) throws BeansException {  
	assertBeanFactoryActive();   
	return getBeanFactory().getBean(name);
}
public <T> T getBean(Class<T> requiredType) throws BeansException {   			    	assertBeanFactoryActive();
	return getBeanFactory().getBean(requiredType);
}

其中,当参数的数据类型是字符串时,表示根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。
当参数的数据类型是Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错

getBean()方法使用

ApplicationContext applicationContext = new 
            ClassPathXmlApplicationContext("applicationContext.xml");
// 方式一  
	UserService userService1 = (UserService) applicationContext.getBean("userService");
//方式二
  	UserService userService2 = applicationContext.getBean(UserService.class);

总结:

今天主要就是入门,学习了 (IOC): 控制反转,解释:

没有学习框架前 ,主动出击,需要哪个对象就创建那个对象(new 对象())
学习了框架后,	将类的创建权交个Spring容器(IOC),我们在java代码中被动接受容器返回的对象.

程序启动时,加载Spring的容器,Spring会解析核心配置文件(applicationContext.xml),根据配置文件中的信息,创建对应的实例,将实例存放在IOC容器中.

//1.程序启动时,加载Spring的容器,Spring会解析核心配置文件(applicationContext.xml),根据配置文件中的信息,创建对应的实例,将实例存放在IOC容器中.
// 2解析核心配置文件,得到IOC容器
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//3.调用Spring的API从容器中获取相关的实例,进行使用.
UserDao dao = (UserDao)app.getBean("id");
UserDao dao = app.getBean(UserDao.class);
----------------------------配置文件    ---------------------------

今天用到的标签:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSM --Spring 第一天 的相关文章

  • ZCU106的FMC接口AD/DA(全网唯一、全网最详)

    马上就要毕业啦 xff0c 好久没写文章了 xff0c 今天给大家带来硕士期间的最后一次AD DA实验的实验记录 xff0c 废话少说 xff0c 先看连接与视频 连接 视频 我做的实验是AN108 43 FL9613的DA与AD回环测试
  • BigDecimalUtils BigDecimal加减乘除

    span class token keyword public span span class token keyword class span span class token class name BigDecimalUtil span
  • 关于引用的疑问

    1 变量名回顾 变量 是一段实际连续存储空间的别名 程序中通过变量 来申请并命名存储空间 通过变量 的名字可以使用存储空间 问题 xff1a 一段连续的存储空间只能有一个别名吗 xff1f 2 c 43 43 中引用 引用 可以看作一个已定
  • 在Ubuntu系统中安装字体(以安装华文行楷和方正舒体为例)

    背景 xff1a 笔者在做一个项目时 xff0c 因为项目是在windows系统中开发的 xff0c 用react写的页面 xff0c 在windows本地验证是没有问题 xff0c 但是部署到服务器 xff08 服务器系统为Ubuntu
  • Linux Shared Memory的查看与设置

    1 Linux Check Memory Usage 2 How to Check Shared Memory on Linux 3 Shared Memory Configuration 共享内存就是进程之间可以共享的一段内存 xff0c
  • java构造和生成固定的json格式(geojson为例)

    java构造和生成json格式 xff08 geojson为例 xff09 一 所要构造的json格式 二 思路和步骤 1 题外说明 本文是先解析读入的txt文件 xff0c 然后建立对应的java类来接受解析的某些值 xff0c 用了自己
  • Android 程序退出 Toast还一直显示 解决方案

    今天 xff0c 改了个bug xff1a 点击两次返回程序退出 如大家所想 xff0c 第一次点击用Toast提示 xff0c 如果在两秒内再次点击那么程序退出 在我们平时写App的时候 xff0c 习惯用Application的上下文对
  • 在word中快速查找所有图片

    选择导航窗格 点击搜索框里的小三角 选择查找图形
  • systemctl命令详解

    在linux内核启动完以后 xff0c 会执行 etc rc d rc local脚本 xff0c 最后再执行 bin login程序 xff0c 进入用户登陆界面 传统的做法 xff0c 如果要在linux里添加开机自启的命令 xff0c
  • Linux系统之下开启tomcat控制台,查看代码运行情况

    方法 xff1a 进入tomcat安装文件夹 xff0c 打开命令行 如下操作 xff1a bin gt startup sh cd logs tail f catalina out
  • 四元数姿态表示总结

    文章目录 简介用法一 xff1a 欧拉角 四元数1 Euler2Quat xff1a 2 Euler 2 Vect 2 Quat xff1a 3 Quat 2 Euler xff1a 用法二 xff1a 旋转矩阵 四元数1 Quat 2 R
  • 调用OpenCV库出现: undefined reference to `xxxxx‘ 的解决办法(使用MinGW编译器)

    记录OpenCV正确安装与调用过程 我的CMakeLists txt如下 xff1a cmake minimum required span class token punctuation span VERSION span class t
  • 解决git fatal:无法找到‘https‘的远程助手

    解决git fatal 无法找到 https 的远程助手 1 问题 今天使用git拉去代码的时候出现 fatal 无法找到 39 https 39 的远程助手错误 xff0c 如下所示 span class token function g
  • [Android Framework]Android 11系统Update-API时Lint检查问题解决和记录

    1 什么是Lint检查 Android Lint 是 ADT 16 xff08 和工具 16 xff09 中引入的一个新工具 xff0c 用于扫描 Android 项目源以查找潜在的错误 Android11之前 xff0c 我们在进行Fra
  • openEuler22.03LTS网卡配置

    VmWare完成安装openEuler xff0c 修改网卡配置文件 xff0c 重启network报错service not found xff0c 因为欧拉使用nmcli管理网络 按照centos7的经验 xff0c 修改ifcfg配置
  • 利用在线词典批量查询英语单词

    进来遇到很多英语生词 xff0c 工具书上给的解释错误百出 xff0c 而很多在线词典不但可以给出某个单词的解释 xff0c 而且有大量的示例 xff0c 因此猜想利用在线词典批量查询这些单词 怎么实现呢 xff1f 首要问题是如何自动获取
  • linux svn服务器搭建 centos 搭建svn服务器

    本文是在CentOS中采用yum安装方式 优点 xff1a 简单 xff0c 一键安装 xff0c 不用手动配置环境变量等 缺点 xff1a 安装位置为yum默认 xff0c 比如我们公司服务器上安装软件有自己的规定 xff0c 一般会采用
  • Firewall 防火墙常用命令

    Firewall开启常见端口命令 xff1a 注意 permanent意思是 永久生效 firewall cmd zone 61 public add port 61 80 tcp permanent firewall cmd zone 6
  • 第二章——keil5修改工程名字

    第一章 stm32f103建立工程 第二章 keil5修改工程名字 目录 1 修改模板文件名 2 修改工程文件名 3 删除中间文件 4 修改输出中间变量文件名 5 点击编译 xff0c 改名成功 1 修改模板文件名 把第一章建立的工程模板的
  • origin2021如何切换中文界面

    origin2021如何切换中文界面 一 直接设置Change Language二 Change Language菜单是灰色的 一 直接设置Change Language 1 单击 Help gt Change Language 2 将La

随机推荐

  • fbe 业务流程分析

    参考链接 xff1a https www cnblogs com bobfly1984 p 14090078 html 总结 根据 data unencrypted key和 data misc vold user keys de 0 路径
  • js的字符串匹配方法match()和Java的字符串匹配方法matches()的使用?以换行符替换为其他字符为例

    js的字符串匹配方法match 和Java的字符串匹配方法matches 的使用 xff1f 以换行符替换为其他字符为例 js的 xff1a str match n igm length会返回str中有多少个换行str match bc i
  • UNIX 环境高级编程

    与你共享 xff0c 与你共舞 xff01 UNIX环境高级编程 xff08 第3版 xff09 是被誉为UNIX编程 圣经 xff1b 书中除了介绍UNIX文件和目录 标准I O库 系统数据文件和信息 进程环境 进程控制 进程关系 信号
  • 华为服务器WebBios创建磁盘阵列

    步骤 1 启动服务器按ctrl 43 h进入WebBios 2 点击Start确定进入下一步 3 左栏的Configuration Wizard添加raid 4 选New Configuration新建raid即可 5 选中硬盘 然后再按N
  • goland 无法编译输出 Compilation finished with exit code 0

    golang编写程序无法输出
  • 分享关于AI的那些事儿

    机器人很厉害 给人治病的ibm 的Watson 沃森 击败世界围棋冠军的AlphaGo阿尔法狗 陪你聊天的机器人 数据标注 木马识别 恶意访问拦截 智能家居 但是17年首次出现了机器人获得国籍 这个机器人叫做索菲亚 这是一个类似人类的机器人
  • String Evolver, My First Genetic Algorithm

    When reading Evolutionary Computation for Modeling and Optimization 1 I found following problem in section 1 2 3 A strin
  • MongoDB特点及功能介绍

    一 MongoDB 介绍 1 基本概念 MongoDB是一个高性能 xff0c 开源 xff0c 无模式的文档型数据库 xff0c 是当前NoSQL数据库产品中最热门的一种 它在许多场景下可用于替代传统的关系型数据库或键 值存储方式 xff
  • 线程同步以及线程调度相关的方法

    wait xff1a 使一个线程处于等待 xff08 阻塞 xff09 状态 xff0c 并且释放所持有的对象的锁 xff1b sleep xff1a 使一个正在运行的线程处于睡眠状态 xff0c 是一个静态方法 xff0c 调用此方法要处
  • 智能医疗辅助诊断——调查与思考

    背景 为什么要做智能医疗 xff1f 优质医疗资源不足且增长缓慢各地方医疗资源分配不均客观条件满足 xff0c 人工智能技术发展 xff0c 算法 算力 数据齐备 目录 指出 xff0c 医用软件按照预期用途分为辅助诊断类和治疗类 诊断功能
  • WebMvcConfigurer配置HandlerInterceptor拦截器失效

    1 前言 Springboot2 0之前 xff0c 实现拦截器功能的配置类是通过继承 extends WebMvcConfigurerAdapter类完成的 xff0c 最近项目把Springboot升级到了Springboot2 X x
  • ubuntu deepin wechat中文乱码解决

    deepin wechat 中文乱码解决方案 方案一 执行以下命令打开文件 gedit opt deepinwine tools run sh 找到WINE CMD 修改为 WINE CMD span class token operato
  • 使用k-近邻算法识别手写数字

    本文摘自 机器学习实战 案例 xff0c 对其进行了代码更新与注释 实战介绍 使用k 近邻分类器构造手写识别系统 xff0c 为了简单起见 xff0c 系统只识别0 9 xff0c 需要识别的数字已经使用图形处理软件 xff0c 处理成具有
  • Android开发:Fragment中优雅使用ViewBinding【Java】

    目录 前言 官网示例 封装 前言 ViewBinding可以帮助我们减少代码中的大部分findViewById xff0c 官网中提到了它的优点和缺点 xff1a Null 安全 xff1a 由于视图绑定会创建对视图的直接引用 xff0c
  • c++ 读取UTF-8编码文本

    这个是苏州大学一个有关NLP的选修课的第一个作业 xff0c 刚开始有点摸不着头脑 xff0c 随着慢慢接触有点理解了老师的用心 任务是给定一个给一段汉语文本 xff0c 将文本切分开为单个character xff0c 并在charact
  • 一次完整的http请求全过程(知识体系版)

    最差的面试体验 面试官评价 xff1a 除了学历 xff0c 和培训班出来的没区别 确实 xff0c 很多东西我只是会用 面完回来 xff0c 我发现我确实连一个完整的http请求如何发送都不明白 失败并不可怕 但是一定得把失败的悲痛化成力
  • python 根据网易云歌曲的ID 直接下载歌曲

    特么的 xff0c xff0c xff0c 上次写了一堆 xff0c 发现 xff0c 原来下载网易云的歌曲根本不用这么费劲 xff0c xff0c 直接用 http music 163 com song media outer url i
  • The POM for commons-codec:commons-codec:jar:1.15-SNAPSHOT is missing

    问题描述 Maven打包的时候常常报异常 The POM for commons codec commons codec jar 1 15 SNAPSHOT is missing no dependency information avai
  • python 用pyinstaller打包多进程multiprocessing、tkinter scrapy爬取豆瓣TOP250部电影信息

    参考文章 xff1a https blog csdn net La vie est belle article details 79017358 https blog csdn net weixin 42052836 article det
  • SSM --Spring 第一天

    1 spring概述 1 1 Spring是什么 xff08 理解 xff09 Spring是分层的 Java SE EE应用 full stack 全栈的 xff0c 什么都会的 xff0c 管家的 轻量级开源框架 xff0c 以 IoC