Spring

Spring 源码之 SpringProperties 类简介 SpringProperties 是 Spring core 包中一个用于读取并加载Spring库级别属性的工具类,其读取的文件为classpath下的spring.properties文件。内部通过一个Properties对象维护读取到的属性,并对外暴露一些设置属性值或者获取属性值的的静态方法。在根据key获取属性值时,如果localProperties不存在,则从VM系统属性中获取。 阅读详情

Spring

今天课程计划

  • spring介绍

  • Spring-IOC-XML配置

  • 创建Spring项目

  • 测试体验Spring的入门案例

  • Bean的获取方式

  • Bean的创建方式

  • 单例&懒加载

  • Bean的生命周期

  • Setter注入

  • 构造方法注入

  • 自动装配

学习目标

  • 掌握SpringIoc-xml配置

  • 了解Bean,IOC,Di等概念,理论

  • 了解Bean的生命周期

一.介绍

1.容器

  • IOC容器

  • 核心机制:控制反转(IOC),依赖注入(DI)

  • 管理对象的容器(Bean)

  • 优势:解耦组件,降低类与类之间的依赖

2.轻量级设计

  • 配置简单:基于XML或者配置类或者注解,配置方式,无侵入式开发

  • 资源占用低:适合小型项目,也可以扩展到大型项目

3.Bean生命周期管理

  • bean对象的创建到使用到销毁,都是由Spring负责的

  • 全流程控制:从 创建 → 依赖注入 → 初始化 → 使用 →销毁

  • 可定制:整个过程通过调用方法,灵活干预

4.解耦

  • 类 与 类 之间的依赖关系,叫耦合

  • 依赖: 删除/修改 一个类的时候,其他类,会不会报错/报红线

  • 降低依赖程度:耦合度降低

5.内聚

  • 责任单一原则

    • 尽可能的让一个类,一个方法,只做一件事

    • 一个非常重要的编程思想

    • 要始终贯穿你的编程生涯

  • 让类或者方法的功能,更加的单一,纯粹

  • 高内聚


一句话总结:

Spring通过IOC容器,实现了 轻量级,解耦化的Bean对象管理,简化了开发的流程,并增强了系统的灵活性

高内聚,低耦合

二.核心

IOC

  • 控制反转

DI

  • 依赖注入

AOP

  • 面向切面

三.优势

1 设计原则支持

  • 高内聚:方法责任单一,符合责任单一原则

  • 低耦合:类之间的依赖最小化,符合最少知道原则,避免跨级调用

2.简化开发与事务管理

  • 普通事务

@Override
public void updateLoginTime(Long uid) {
    SqlSession sqlSession = MyBatisHealper.getSqlSession();
    try {
        //关闭自动提交
        sqlSession.commit(false);
        //获取Dao Mapper
        AdminUserDao mapper = sqlSession.getMapper(AdminUserDao.class);
        //这个sql语句执行时 根据程序执行逻辑 不可能出错 所以不需要返回值 也不需要对异常情况做处理
        mapper.updateUserLoginTime(uid);
        //风险
        long i = 100/uid;
        //提交事务
        sqlSession.commit();
    } catch (Exception e) {
        //产生了异常,回滚事务
        sqlSession.rollback();
    }finally {
        //归还SqlSession
        MyBatisHealper.backAndCommitSqlSession(sqlSession);
    }
​
}
  • 声明式事务

    • 通过注解,实现事务自动回滚

    • 无需手动编程,只需要添加一个简单的注解就可以了

3.灵活集成与扩展

  • Spring有完整的生态圈

  • 市面上流行的框架和技术,基本上都兼容Spring

  • 可以顺利和任意的框架整合在一起,无缝衔接

4.模块化设计

  • 按需引入功能

  • MVC

  • aop等功能

5.核心机制

  • 控制反转

  • 依赖注入

SpringIOC

一.创建Spring项目

1.解决Idea 2024 版本下,main方法运行bug

Ctrl + Shift + Alt + /

2.配置新项目的Maven

3.创建一个普通的Java项目

4.包设计

大家在平时编码过程中,一定要注意编码规范

类名:首字母,必须大写

包名:项目的性质.公司名.项目名.模块名

缩进:必须对齐

编码规范之后,能更容易找到bug,并且可以避免很多bug的产生

5.引入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
</dependency>

6.创建Spring配置文件

Spring有两种启动模式:XML 和 注解

现在使用xml的配置文件,作为Spring项目的配置

<?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>

7.第一个测试案例

体验一下Spring容器Bean的创建和获取

/**
 * 每个类,天然都会有一个隐藏的无参构造方法
 * 如果手写了一个有参构造方法之后,之前隐藏的无参构造就会消失
 * 因为学习框架之后,很多框架在创建对象的时候,默认会调用无参构造
 * 无参构造方法的消失会产生异常bug
 * 所以,养成习惯,每次写有参构造的时候,都要记得随手随手添加一个无参构造方法,不管有没有用
 */
@ToString
public class Student {
​
    private Integer id;
    private String name;
​
    public Student() {
    }
​
    public Student(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
}
  • 修改配置文件 spring1.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">
​
    <!--相当于写了一个Student abc =  new Student();-->
    <!--当前的Student类,创建对象的权力,交给了Spring容器-->
    <!--对象控制权的变化,被成为 控制反转 IOC-->
    <!--spring容器来管理对象,而不是程序员去管理-->
    <!--容器创建好了之后,把当前的对象装到容器里,起的名字是abc-->
    <!--不同的对象,在Spring容器中,不能重名-->
    <bean id="abc" class="com.javasm.springdemo.ioc1.Student"/>
</beans>
  • 测试类

public class Demo1 {
    public static void main(String[] args) {
        f1();
    }
​
    private static void f1() {
        //从类的加载路径中,寻找配置文件 spring1.xml
        //加载到程序中,解析xml
        //读取到spring1.xml中的标签内容
        //解析成功,创建一个Bean的集合,用来存储所有的Bean对象
        //new bean对象,把new出来的对象,存入Bean的集合中,等待调用
        //applicationContext  就是Spring容器对象
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring1.xml");
        //通过bean的id来获取bean对象
        Student abc = (Student) applicationContext.getBean("abc");
        abc.id = 10;
        System.out.println(abc);
    }
}

8.启动原理

程序启动 → 读取XML文件 → 解析XML文件 → 读取bean标签里的内容(id和class属性) → 通过反射,调用类的无参构造方法 → 创建一个新的对象 → 创建出来的对象,存入Spring容器

  • 异常

Caused by: java.lang.NoSuchMethodException: com.javasm.springdemo.ioc1.Student.<init>()
缺少无参构造方法
private static void f2() throws Exception{
    //解析xml 读取<bean id="abc" class="com.javasm.springdemo.ioc1.Student"/>
    String id = "abc";
    String className = "com.javasm.springdemo.ioc1.Student";
    //创建Bean对象
    Class<?> aClass = Class.forName(className);
    //执行无参构造
    Object o = aClass.getConstructor().newInstance();
    //模拟创建Spring容器,存入对象
    Map<String,Object> map = new HashMap<>();
    map.put(id,o);
    //从容器中获取
    Student object = (Student)map.get("abc");
    object.id = 100;
    System.out.println(object);
}

二.Bean的管理

1 获取Bean的方式

  • 根据ID 获取Bean对象

Student abc = (Student) applicationContext.getBean("abc");
  • 根据类型获取

Student student = applicationContext.getBean(Student.class);
  • 根据id+类型

Student abc = applicationContext.getBean("abc", Student.class);
  • 异常

Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.javasm.springdemo.ioc1.Student' available: expected single matching bean but found 2: abc,stu
	通过类型获取Bean对象,但是容器中,相同类型的Bean有多个
  • 别名

通过别名和id名获取Bean对象

    <bean id="abc" class="com.javasm.springdemo.ioc1.Student"/>
    <alias name="abc" alias="xyz"/>
Student abc = applicationContext.getBean("abc", Student.class);
Student xyz = applicationContext.getBean("xyz", Student.class);

2 创建Bean的方式

  • 无参构造方法

    <bean id="abc" class="com.javasm.springdemo.ioc1.Student"/>
  • 静态工厂

public class StudentStaticFactory {

    public static Student f1(){
        Student student = new Student(1001,"小明");
        return student;
    }
}
<bean id="xiaoming" class="com.javasm.springdemo.ioc1.factory.StudentStaticFactory" factory-method="f1"/>
Student student = applicationContext.getBean("xiaoming", Student.class);
  • 实例工厂

public class StudentFactory {
    public Student f2(){
        Student student = new Student(2001,"李雷");
        return student;
    }
}
    <!--把工厂对象 单独添加到Spring容器中-->
    <bean id="stufactory" class="com.javasm.springdemo.ioc1.factory.StudentFactory"/>
    <bean id="lilei" factory-bean="stufactory" factory-method="f2"/>
Student student = applicationContext.getBean("lilei", Student.class);
  • Spring工厂

public class StudentSpringFactory implements FactoryBean<Student> {
    @Override
    public Student getObject() throws Exception {
        return new Student(3001,"韩梅梅");
    }

    @Override
    public Class<?> getObjectType() {
        return Student.class;
    }

    @Override
    public boolean isSingleton() {
        //返回true 是单例
        //返回 false 是多例
        //这个方法可以选择不重写,在Spring容器中,Bean对象默认都是单例的
        return true;
    }
}
<bean id="han" class="com.javasm.springdemo.ioc1.factory.StudentSpringFactory"/>
Student student = applicationContext.getBean("han", Student.class);

3 单例和懒加载

  • 单例

Spring 的Bean在默认情况下,都是单例的.

  • 多例

启动容器的时候,并没有创建Bean对象,只有调用的时候创建了

<bean id="abc" class="com.javasm.springdemo.ioc1.Student" scope="prototype"/>
  • 懒加载

不使用的Bean对象,不去创建对象

仅仅对单例生效

<bean id="abc" class="com.javasm.springdemo.ioc1.Student" lazy-init="true"/>

全局懒加载

<?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"
        default-lazy-init="true"
>

4.生命周期管理

public class Student {

    public Integer id;
    public String name;

    public Student() {
        System.out.println("----------========Student() =====----------");
    }

    public Student(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public void t1(){
        System.out.println("初始化方法");
    }

    public void t2(){
        System.out.println("销毁方法");
    }
}
<bean id="abc" class="com.javasm.springdemo.ioc1.Student" init-method="t1" destroy-method="t2" />

初始化方法:init-method

销毁方法:destroy-method

正常情况下,不会执行销毁方法,只有在容器关闭之前,执行销毁

1 无参构造
2 初始化方法 init
3 方法的调用
4 销毁的方法
5 关闭容器

三 依赖注入

方式特点
构造器注入强制依赖,不可以修改属性
Setter注入可选依赖,可变属性

1 Setter注入案例

  • 新建Java类

    • 实体类

    • 给自己的属性,注入一些值

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GameModel {

    private Integer id;
    private  String name;
    private Double price;

    //英雄列表
    private String[] heros;
    //关卡
    private List<String> levels;
    //成就
    private Set<String> achievements;
    //配置
    private Properties gameConfig;
    //背包
    private Map<String,String> items;

    //公司
    private  Company company;

    //玩家列表
    private List<Player> playerList;
}
  • 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">

    <bean id="game" class="com.javasm.springdemo.game.model.GameModel">
        <property name="id" value="1001"/>
        <property name="name" value="英雄联盟"/>
        <property name="price" value="22.22"/>
        <!--英雄列表-->
        <property name="heros">
            <array>
                <value>提莫</value>
                <value>亚索</value>
                <value>剑圣</value>
            </array>
        </property>
        <!--关卡-->
        <property name="levels">
            <list>
                <value>黄风岭</value>
                <value>努巴尼</value>
                <value>狮驼岭</value>
            </list>
        </property>
        <!--成就-->
        <property name="achievements">
            <set>
                <value>顺手牵羊</value>
                <value>借刀杀人</value>
                <value>南蛮入侵</value>
            </set>
        </property>
        <!--配置-->
        <property name="gameConfig">
            <props>
                <prop key="model">全屏</prop>
                <prop key="location">zh</prop>
            </props>
        </property>
        <!--背包-->
        <property name="items">
            <map>
                <entry key="1001" value="复活甲"/>
                <entry key="1002" value="定风珠"/>
                <entry key="1003" value="火麒麟"/>
            </map>
        </property>
        <!--公司-->
        <property name="company" ref="cp"/>
        <property name="playerList">
            <list>
                <bean class="com.javasm.springdemo.game.model.Player">
                    <property name="id" value="2002"/>
                    <property name="nickname" value="追风的老人"/>
                </bean>
                <ref bean="p2"/>
            </list>
        </property>
    </bean>

    <bean id="cp" class="com.javasm.springdemo.game.model.Company">
        <property name="id" value="111"/>
        <property name="name" value="拳头"/>
        <property name="address" value="863软件园"/>
    </bean>

    <bean id="p2" class="com.javasm.springdemo.game.model.Player">
        <property name="id" value="2003"/>
        <property name="nickname" value="李火旺"/>
    </bean>
</beans>
  • 测试

public class Demo2 {
    public static void main(String[] args) {
        f1();
    }

    private static void f1() {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring2.xml");
        GameModel game = applicationContext.getBean("game", GameModel.class);
        System.out.println(game);
    }
}

2 构造方法注入

@Data
@NoArgsConstructor
public class Music {
    private Integer id;
    private String name;
    private String time;
    private Company company;

    public Music(Integer id, String name, String time, Company company) {
        this.id = id;
        this.name = name;
        this.time = time;
        this.company = company;
    }
}
  • XML

    <bean id="music" class="com.javasm.springdemo.game.model.Music">
        <constructor-arg name="id" value="1000" type="java.lang.Integer"/>
        <constructor-arg index="1" value="云顶天宫"/>
        <constructor-arg index="2" value="5分钟"/>
        <constructor-arg index="3" ref="cp"/>
    </bean>
  • 测试

    private static void f1() {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring2.xml");
        Music music = applicationContext.getBean("music", Music.class);
        System.out.println(music);
    }

3 自动装配

<bean id="game" class="com.javasm.springdemo.game.model.GameModel" autowire="byType"/>
autowire自动装配
byType:是去Spring容器中,寻找相同列席的bean对象,根据属性的类型进行寻找,类似于getBean(Company.class),找到了,自动赋值
<bean id="game" class="com.javasm.springdemo.game.model.GameModel" autowire="byName"/>
byName:去Spring容器中寻找,id=company,类型是Company的Bean对象,找到之后,自动赋值

四 总结

1 SpringIOC核心价值

  • 解耦:降低耦合度

  • 灵活:通过配置改变行为

2 重点必会的知识

  • 理解Spring的启动原理

  • 能描述什么是Spring

  • 能描述什么是IOC和DI

  • 依赖注入和控制反转都是什么意思

  • 单例

    • 知道Spring默认是单例模式

    • 给你任意一个类,能把他修改成单例的

    • 能用纸和笔写出来

  • 构造方法和初始化方法的执行顺序

3 了解

  • 懒加载

  • 获取Bean的方式

  • 创建Bean的方式

  • 初始化和销毁

  • 构造方法的调用

  • 依赖注入的XML配置

在一些其他人的框架中,可能会看见类似的XML配置

Spring Boot系列十三 Spring Boot集成RabbitMQ 1. 概述之前我有一系列关于RabbitMQ文章介绍了RabbitMQ的用法,本篇我们介绍如何在Spring Boot中集成RabbitMQ。本篇主要内容如下: 在Spring boot中消息的发送和接收的两种方式的demo 配置使用MessageConverter对消息序列化 2. Demo工程公共部分介绍工程名称:rabbitmq需要在我们的工程中的pom.xml引入新jar <!-- spri 阅读详情

相关推荐

Java Spring、Spring MVC、Spring Boot 和 Spring Cloud 的关系与区别

本文详细介绍了 Java 开发中常用的 Spring 系列框架及其关系。Spring 是核心框架,提供控制反转(IoC)和面向切面编程(AOP)等基础功能。Spring MVC 是 Spring 的模块,专注于 Web 开发,采用 MVC 设计模式。Spring Boot 简化了 Spring 应用的初始搭建和开发,提供默认配置和嵌入式服务器。Spring Cloud 基于 Spring Boot,扩展了分布式系统开发的能力,提供服务发现、熔断器等功能。这些框架共同构成了强大的 Java 开发生态系统,满足

C_V_Better的博客 1307

搭建Spring开发环境并编写第一个Spring小程序

本文详细介绍了两种搭建Spring开发环境的方法:自动配置方式和手动配置方式。自动配置方式通过MyEclipse工具实现,适合初学者;手动配置方式需要下载Spring软件包并手动添加JAR文件,灵活性更高。文章通过创建动物接口实现和人接口实现两个示例项目,分别演示了两种配置方式的具体步骤,包括创建项目、添加Spring支持、配置JAR包位置、编写测试代码等。最后指出自动配置简单快捷,手动配置则更灵活,建议初学者使用类路径方式查找配置文件。两种方法各有所长,开发者可根据实际需求选择合适的配置方式。

ywl470812087的博客 11万+

Spring MVC 与 Spring Boot 的差异到底在哪?

本文深入对比了传统SpringMVC与SpringBoot的核心差异。作者结合开发经验,从配置方式(XML到自动配置)、依赖管理(手动引入到Starter)、部署模式(外置Tomcat到内嵌容器)、外部化配置等方面进行剖析,指出SpringBoot通过自动配置砍掉了80%的模板代码,但同时也可能带来配置冲突等问题。文章强调SpringBoot并非替代SpringMVC,而是其"脚手架",底层仍依赖DispatcherServlet等核心组件。

无 592

最新的Spring官网如何下载Spring框架

最新的Spring官网如何下载Spring框架。特此写一篇简单的教程,供大家分享。 1. 首先打开Spring官网 https://spring.io/ 2. 点击页头 PROGECTS 选项 3. 打开 SPRING FRAMEWORK 一项 4. 点击页面中的GitHub 图标 5. 在文章中部,有一个Downloading A...

脑壳疼 5118

Spring 容器

/ 标记该类为Spring Bean,容器会自动扫描并创建实例@Component// 标记该类为Spring配置类// 指定扫描的包,容器会自动识别包下的@Component/@Service/@Repository/@Controller等注解的类Spring 容器是管理 Bean 的核心组件,负责 Bean 的创建、依赖注入和全生命周期管理,核心价值是解耦;实际开发中优先使用(而非基础的),主流方式是基于注解配置类(

weixin_53050448的博客 650

使用IntelliJ IDEA中的Spring Initializr来快速构建Spring Boot/Cloud工程

我相信许多初学者都看了Spring Boot和Spring Cloud相关的博文中,都会涉及Spring Boot工程的创建的问题。而一般所看到的都是使用IntelliJ IDEA 工具来创建,并且方便许多,而创建的方式多种多样之前我是通过Maven来手工构建,也可以通过SPRING INITIALIZR页面工具来创建,相信每一个人都有自己喜欢而熟练的方式。接下来介绍嵌入在的IntelliJ

_William_Cheung的博客 3万+

Spring Boot、Spring Cloud实现原理

Spring、Spring Boot、Spring Cloud实现原理

tszc95的博客 554

端侧部署与优化:让 AI 真正走进现实生活的关键技术

AI 的开发流程分为 “训练” 与 “推理” 两大阶段。在训练阶段,科研人员依托云端海量数据和高性能 GPU 算力,构建出精度优异的 AI 模型 —— 比如能识别 1000 种物体的图像分类模型、能理解人类语言的自然语言处理模型。但这些在云端 “战绩斐然” 的模型,若直接应用到现实场景中,却会面临三大 “落地困境”。从云端到端侧,从模型压缩到硬件适配,端侧部署与优化技术解决了 AI 落地的核心难题,让 AI 不再是实验室里的 “高精尖技术”,而是融入日常生活的 “实用工具”。

m0_63477749的博客 1052

spring

在应用开发中用的非常多, @Component注解是一个通用注解,可以用在于任何类上。包括普通java类,业务逻辑组件,持久化对象等等。通过@Component注解spring自动创建该类的实例注入SpringIOC容器中。@Bean是用于配置类中声明一个Bean的,它通常是用于配置类的方法上面,表示把这个方法的返回对象注册到Spring IOC容器中。通过@Bean自定义Bean的创建和初始化过程,包括指定Bean的名称、作用域、依赖关系等。1.用途不同@Component用于标识普通的类。

黑冰[̲̅V̲̅I̲̅P̅] 818

机器人控制入门

机器人控制入门 对于工科领域来说,脱离实践的学习都是肤浅的,对于控制这种强调经验的技术更是如此。如果去问一个程序员怎么学习一块技术,他必然让你去多编程。机器人领域也是。如果想把基本功打扎实,那么实践更是必不可少了。 机器人控制有三个元素:控制器(算法),执行器(电机),传感器; 控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位

彼岸花 1万+

基于ProXmoX VE的虚拟化家庭服务器(篇一)—ProXmoX VE 安装及基础配置

ProxmoxVE是一款套开源的虚拟化管理软件,用户可通过网页的方式来管理服务器上使用kvm以及lxc技术运行的虚拟机。同时提供了一些先进功能的支持,如集群、HA等。PVE虽然是开源,却是由一个商业公司在运营、更新以及维护。...

隔壁老瓦的专栏 6321

通过Spring官网下载Spring jar包

这几天刚接触Spring框架,算是在入门阶段吧,对于初学者来说学习Spring框架其中有很多准备工作需要去做的,就比如今天我要讲的如何下载Spring中需要的一些jar包。 【第一步】 打开Spring官网:https://spring.io,点击PROJECTS,如下所示 【第二步】 点击SPRING FRAMEWORK图标 【第三步】 点击SPRING FRAMEWORK图...

1116

[南大ICS-PA2]PA2 - 简单复杂的机器:冯诺依曼计算机系统

mips32和riscv32的指令长度只有32位, 因此它们不能像x86那样, 把C代码中的32位常数直接编码到一条指令中. 思考一下, mips32和riscv32应该如何解决这个问题?加载立即数到寄存器的高20位,然后便可以是哟给你标准的立即指令来创建32位常量。在程序分析领域中,静态指令是指程序代码中的指令,动态指令是指程序运行过程中的指令,例如对于一下指令序列。位域,在小端机器上,先定义的在每个字节的低位,后定义的在每个字节的高位。,这是处理非法指令的宏,其定义在。指令,而下一条动态指令则是。

qq_42474104的博客 928

如何下载Spring框架

首先进入Spring官网:https://spring.io/ 点击PROJECTS   找到SPRING FRAMEWORK 并点击  因为是托管在github上的,所以点击github标志  找到Spring Framework Artifacts 找到Spring仓库连接  点击Artifacts选项 然后找到菜单下的 libs-release-local...

liutao2001的博客 2万+

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

基于PCIE8311+FPGA+TMS320F28335 PCIE应用项目开发板PROTEL99设计硬件(原理图+PCB)文件

基于PCIE8311+FPGA+TMS320F28335 PCIE X1应用项目开发板PROTEL99设计硬件(原理图+PCB)文件,Protel 99se 设计的项目工程文件,包括原理图及PCB印制板图,可用Protel或 Altium Designer(AD)软件打开或修改,都已经制板在实际项目中使用,可作为你产品设计的参考。

GJZGRB的博客 577

Spring8大模块

Spring8大模块

SSSSSSch的博客 979

NS-3 和Aqua-sim-ng 学习笔记(一)

因为要搞水下网络,OMNET++不太合适,就转Aqua-sim。这是基于NS-2上的模型,NS-2需要额外学一门tcl脚本语言。 正好查到它的一个升级版Aqua-sim-NG,在github上,https://github.com/rmartin5/aqua-sim-ng是基于NS-3的,只需要基本的C++,不用学tcl语言。美滋滋。 装好ubuntu之后,安装NS-3和Aqu...

diboshang8820的博客 2191

Java-24 深入浅出 Spring 全景:从起源到 Spring 6 一文打通 IoC / AOP / 发展史

Spring 是面向 Java 平台的分层 Full-Stack 轻量级开源框架,以控制反转(IoC)和面向切面编程(AOP)为核心理念,简化企业级应用开发。本文系统讲解 Spring 的发展历程:2003 年 Rod Johnson 推出雏形,2004 年 3 月发布 1.0 正式版,2006 年 Spring 2.0 引入 XML Schema 命名空间,2009 年 12 月 Spring 3.0 基于 Java 5 并引入 SpEL,2013 年 12 月 Spring 4.0 全面支持 Java

谢谢你的喜欢 我们一起无限进步 5186

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整源码)

本文详细介绍了如何利用ADS1247高精度ADC与STM32微控制器构建PT100测温系统,实现±0.1℃的温度测量精度。内容涵盖硬件设计、寄存器配置、SPI通信优化及温度换算算法,特别适合工业自动化和精密仪器领域的嵌入式开发人员参考。

weixin_26897585的博客 428

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring系列——两万字长文教会你Spring (超详细!!!)

到此,我们学习完了 Spring 框架,包括: Spring 体系结构 Spring Bean Spring AOP Spring JDBC Spring 事务管理 写此文章是为了做个笔记,等以后自己忘记了可以回头快速上手。同时也分享给小伙伴们,希望我们都能越来越好,不会就学 B 站,不懂就问 AI,总好过自己两耳不闻窗外事的独自琢磨。 最后认识一下吧,笔者叫`北迁`,hhh~~。

weixin_63009611的博客 1181

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring Initializr集成:用lsp-java快速创建Spring Boot项目

lsp-java是一款专为Emacs打造的Java语言服务器协议客户端,它与Spring Initializr深度集成,为开发者提供了快速创建和配置Spring Boot项目的完整解决方案。通过lsp-java,你可以在Emacs环境中一站式完成项目初始化、依赖管理和代码开发,大幅提升Spring Boot应用的开发效率。 ## 为什么选择lsp-java创建Spring Boot项目? ls

gitblog_00572的博客 955

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring5(1) —— Spring简介

0.什么是SPRING Spring : 春天 —>给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架(SPRING框架的前身) 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学 Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术 1.链接 S

Jzandth的博客 288

「Java开发指南」如何使用Spring注释器实现Spring控制器?(二)

本教程将引导开发者如何使用Spring Annotator实现Spring控制器,欢迎下载最新版IDE体验!

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1128
上一篇: excel导入导出
下一篇: SpringIOC-注解
change探索者
博客等级 码龄4年 133粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值