Spring

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

一、工作原理

        内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。  
        Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过  配置类达到的。  
        Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)  
        要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。  

二、IOC

1)概念

控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。

IOC的三种实现机制(三种注入方式)

通过Setter方法、构造方法、接口注入

2)核心——BeanFactory

1、Spring中的BeanFactory和ApplicationContext有什么联系?

两者都是IOC容器的实现方式。BeanFactory是Spring框架最核心的接口,它提供了IoC容器的配置机制。ApplicationContext建立在BeanFactory之上,提供了更多面向应用的功能,包括对国际化和框架事件体系的支持。通常将BeanFactory称为IoC容器,而ApplicationContext称为应用上下文,前者更倾向于Spring本身,后者更倾向于开发者,因此被使用得更多。

2、Bean的生命周期(单例、BeanFactory&ApplicationContext)

①. SpringIOC容器找到关于Bean的定义并实例化该Bean

②. SpringIOC容器实例化的Bean进行配置,也就是IOC注入

③. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID

④. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean);如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文

⑤. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法

⑥、入股这个Bean关联了InitializingBean接口,则调用其afterPropertiesSet方法

⑦. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法

注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例

⑧. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法

3、Bean的作用域

五种作用域中,request、session和globalsession三种作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的SpringApplicationContext环境。

4、使用注解配置Bean

①在spring配置文件中注解扫描

②可以用@Component、@Respository、@Service、@Controller注解来标注需要由springIOC容器进行对象托管的类。

三、AOP

1)概念

Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知(引介)的结合
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程,把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类   

注意:

①一个连接点上可以应用不止一个切面

②一个切点可以匹配多个连接点

补充通知:

AspectJ 支持 5 种类型的通知注解:

–       @Before: 前置通知, 在方法执行之前执行

–       @After: 后置通知, 在方法执行之后执行 ,无论该方法是否出现异常

–       @AfterRunning: 返回通知, 在方法返回结果之后执行,可以访问到方法的返回值

–       @AfterThrowing: 异常通知, 在方法抛出异常之后,可以访问到异常对象,且可以指定在出现特点异常时再执行通知代码

–       @Around: 环绕通知, 围绕着方法执行

1、需要携带ProceedingJoinPoint类型的参数

2、类似于动态代理的全过程:ProceedingJoinPoint类型的参数可以决定是否执行目标方法

3、必须有返回值,返回值即为目标方法的返回值

@Before(”pointCut”)

@After(”pointCut”)

@AfterReturning(value=”pointCut”,returning=”result”)

@ AfterThrowing(value=”pointCut”,throwing=”e”)

@Around(”pointCut”)

Public ObjectaroundMethod(ProceedingJoinPoint pjd){

    Object result = null;

    String methodName = pjd.getsignature().getName();

    try{

        //前置通知

        //执行目标方法

        result = pjd.proceed;

        //返回通知

    }catch(Throwable e){

        //异常通知

        throw newException(e);
}

    //后置通知

    return result;
}


2)AOP的实现方式有哪几种?如何选择?

JDK动态代理实现和cglib来实现

选择:

1. 如果目标对象实现了接口,默认情况下回采用JDK的动态代理实现AOP,也可以强制使用cglib实现AOP
2. 如果目标对象没有实现接口,必须采用cglib库,Spring会自动在JDK动态代理和cglib之间转换


3)JDK动态代理如何实现?

只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。步骤如下:

        1. 定义一个实现接口InvocationHandler的类
        2. 通过构造函数,注入被代理类
        3. 实现invoke( Object proxy, Method method, Object[] args)方法
        4. 在主函数中获得被代理类的类加载器
        5. 使用Proxy.newProxyInstance()产生一个代理对象
        6. 通过代理对象调用各种方法


4)cglib动态代理实现

针对类实现代理,对是否实现接口无要求。原理是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以被代理的类或方法最好不要声明为final类型。
        1. 定义一个实现了MethodInterceptor接口的类
        2. 实现其intercept()方法,在其中调用proxy.invokeSuper( )


5)静态代理和动态代理的区别

静态代理:自己编写创建代理类,然后再进行编译,在程序运行前,代理类的.class文件就已经存在了。

动态代理:在实现阶段不用关心代理谁,而在运行阶段(通过反射机制)才指定代理哪一个对象。


6)使用Spring AOP

①注解

1、加入aop相关jar包

2、定义aop schema、<aop:aspectj-autoproxy/>和注解扫描

当SpringIOC容器侦测到Bean配置文件中的<aop:aspectj-autoproxy>元素时,会自动为与AspectJ切面匹配的Bean创建代理

3、编写切面类

a、一个一般的java类,在其中添加额外实现的功能

@order()优先级,值越小优先级越高

@AspectJ切面声明

@Component 声明Bean

b、配置切入点、通知,并在通知中访问连接细节:

可以在通知方法中添加JointPoint类型的参数,从中可以访问到方法的签名和方法的参数

@Pointcut("execution(publicint com.yuhui.aop.ArithmeticCalculator.*(..))")

public voiddeclareJointPointExpression(){}

@Before("declareJointPointExpression()")

public voidbeforeMethod(JoinPoint joinPoint){}

②配置

1、加入aop相关jar包

2、定义aop schema

3、所有的springAop配置都必须定义在<aop:config>元素内部,对于每一个切面而言,都要创建一个<aop:aspect>元素来为具体的切面实现引用后端的实例

<!-- 配置 AOP -->

    <aop:config>

        <!-- 配置切点表达式 -->

        <aop:pointcutexpression="execution(* com.yuhui.aop.xml.ArithmeticCalculator.*(int,int))"

            id="pointcut"/>

        <!-- 配置切面及通知 -->

        <aop:aspectref="loggingAspect" order="2">

            <aop:beforemethod="beforeMethod" pointcut-ref="pointcut"/>

            <aop:after method="afterMethod"pointcut-ref="pointcut"/>

            <aop:after-throwingmethod="afterThrowing" pointcut-ref="pointcut"throwing="e"/>

            <aop:after-returningmethod="afterReturning" pointcut-ref="pointcut"returning="result"/>

            <!-- 

            <aop:around method="aroundMethod"pointcut-ref="pointcut"/>

            -->

        </aop:aspect>  

        <aop:aspectref="vlidationAspect" order="1">

            <aop:beforemethod="validateArgs" pointcut-ref="pointcut"/>

        </aop:aspect>

    </aop:config>

四、事务

1)概念

Spring 既支持编程式事务管理, 也支持声明式的事务管理.

编程式事务管理: 将事务管理代码嵌入到业务方法中来控制事务的提交和回滚.

声明式事务管理: 大多数情况下比编程式事务管理更好用. 它将事务管理代码从业务方法中分离出来, 以声明的方式来实现事务管理. Spring 通过 Spring AOP 框架支持声明式事务管理.本质是对方法前后进行拦截,然后再目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

声明式事务管理也有两种常用的方式:一种是基于tx和aop命名空间的xml配置;一种是基于@Transaction注解

①什么是事务

作为单个逻辑工作单元执行的一系列操作,满足四大特性:

  1. 原子性(Atomicity):事务作为一个整体被执行 ,要么全部执行,要么全部不执行;
  2. 一致性(Consistency):保证数据库状态从一个一致状态转变为另一个一致状态;
  3. 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
  4. 持久性(Durability):一个事务一旦提交,对数据库的修改应该永久保存。

②并发事务导致的问题

1. 第一类丢失更新(lost update): 在完全未隔离事务的情况下,两个事物更新同一条数据资源,某一事物异常终止,回滚造成第一个完成的更新也同时丢失。
2. 脏读(dirty read):如果第二个事务查询到第一个事务还未提交的更新数据,形成脏读。
3.不可重复读(unrepeated read):一个事务两次读取同一行数据,结果得到不同状态结果,如中间正好另一个事务更新了该数据,两次结果相异,不可信任。

4.幻读(phantom read):一个事务执行两次查询,第二次查询比第一次多出或少一些数据,造成两次结果不一致。只是另一个事务在这两次查询中间插入或者删除了数据造成的。
5. 第二类丢失更新(second lost updates):是不可重复读的特殊情况,如果两个事务都读取同一行,然后两个都进行写操作,并提交,第一个事务所做的改变就会丢失

③事务的隔离级别

1. Serializable 串行化:可避免脏读、不可重复读、幻读的发生
2. Repeatable Read 重复读:可避免脏读、幻读的发生
3. Read Commited 读已提交:可避免脏读的发生
4. Read Uncommited 读未提交:最低级别,任何情况都无法保证

④事务的传播属性

⑤事务其他属性

回滚事务属性:指定回滚规则. 如果有不止一种异常, 用逗号分隔.

超时事务属性: 事务在强制回滚之前可以保持多久. 这样可以防止长期运行的事务占用资源.

只读事务属性: 表示这个事务只读取数据但不更新数据, 这样可以帮助数据库引擎优化事务

⑥事务管理器

事务管理器以普通的 Bean 形式声明在 Spring IOC 容器中

 :在应用程序中只需要处理一个数据源, 而且通过 JDBC 存取

 : 在 JavaEE 应用服务器上用 JTA(JavaTransaction API) 进行事务管理

:用 Hibernate 框架存取数据库

2)使用spring事务

①配置

1、定义tx schema

2、注解扫描、导入资源文件

3、配置数据源

4、配置事务管理器

5、配置事务属性

6、配置事务切入点以及把书屋切入点和事务属性关联起来

2、<context:component-scanbase-package="com.yuhui.aop"></context:component-scan>

<context:property-placeholderlocation="classpath:db.properties"/>

3、<bean id="dataSource"

        class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="user"value="${jdbc.user}"></property>

        <property name="password"value="${jdbc.password}"></property>

        <property name="jdbcUrl"value="${jdbc.jdbcUrl}"></property>

        <propertyname="driverClass"value="${jdbc.driverClass}"></property>

        <propertyname="initialPoolSize"value="${jdbc.initPoolSize}"></property>

        <propertyname="maxPoolSize" value="${jdbc.maxPoolSize}"></property>

    </bean>

4、<beanid="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource"ref="dataSource"></property>

    </bean>

5、<tx:adviceid="txAdvice" transaction-manager="transactionManager">

        <tx:attributes>

            <!-- 根据方法名指定事务的属性 -->

            <tx:method name="find*"propagation="REQUIRES_NEW

                Isolation=”READ_COMMITED”

                rollback-for=”java.io.IOException,java.sql.SQLException”

                no-rollback-for=”java.lang.Exception”

                timeout=”30”

                read-only="true"

              "/>

        </tx:attributes>

    </tx:advice>

6、<aop:config>

        <aop:pointcutexpression="execution(*com.atguigu.spring.hibernate.service.*.*(..))"

            id="txPointcut"/>

        <aop:advisoradvice-ref="txAdvice" pointcut-ref="txPointcut"/>

    </aop:config>

②注解

在方法或者类级别上添加@Transactional注解,当把这个注解应用到类上时,这个类中的所有公共方法被定义成支持事务处理的

1、定义tx schema

2、注解扫描、导入资源文件

3、配置数据源

4、配置事务管理器

5、启用事务注解

6、在方法或类上使用注解

2、<context:component-scanbase-package="com.yuhui.aop"></context:component-scan>

<context:property-placeholderlocation="classpath:db.properties"/>

3、<bean id="dataSource"

        class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="user"value="${jdbc.user}"></property>

        <property name="password"value="${jdbc.password}"></property>

        <property name="jdbcUrl"value="${jdbc.jdbcUrl}"></property>

        <propertyname="driverClass"value="${jdbc.driverClass}"></property>

        <propertyname="initialPoolSize"value="${jdbc.initPoolSize}"></property>

        <propertyname="maxPoolSize"value="${jdbc.maxPoolSize}"></property>

    </bean>

4、<beanid="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource"ref="dataSource"></property>

    </bean>

5、<tx:annotation-driventransaction-manager="transactionManager"/>

6、@Transactional(propagation=Propagation.REQUIRES_NEW,

            isolation=Isolation.READ_COMMITTED,

            rollbackFor={ IOException.class,SQLException.class},

            noRollbackFor={UserAccountException.class},

            readOnly=true,

            timeout=30)

五、七大模块

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText和 POI。

Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。

六、其他

数据连接池的工作机制是什么?

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。


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的博客 1306

架构设计方法论-思维导图梳理

对Java技术栈的架构设计理论及重要特性场景进行系统性的总结梳理,更新中

wangchaodee的博客 1449

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

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

无 592

设计模式—结构型模式概述(思维导图)

建议将思维导图保存下来观看,或点击这里在线观看

qq_34784354的博客 397

别再只怪贴片厂了!从MLCC内部裂纹,看懂物料质量与工艺应力的博弈

本文深入分析了MLCC内部裂纹的失效原因,提供了从裂纹形态学到生产全流程的失效风险地图的完整分析框架。通过实战案例和检测技术组合,帮助工程师精准锁定MLCC失效背后的真凶,优化物料质量和工艺应力管理。

weixin_33122947的博客 292

全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南

Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其它模块并没有被安装到系统中,你可以根据需要安装它们。本节将介绍安装模块和界面汉化的相关知识。

weixin_44793763的博客 2073

Spring Schemas and Namespaces

  本章研究Spring命名空间,你将学到新的并且更简单的办法创建Spring bean XML file,并且我们将讨论所有Spring框架提供的schema。此外,你还将看到如何创建自定义Spring schema和他的处理器。 新的schema最主要的吸引力是他们使用命名空间样式的配置文件,这样他们将更加简单明了并且有更丰富的表达力。他们允许你非常准确的了解每一个元素和属性允许的值。因为...

hypgr 166

别再手动配电脑了!手把手教你用Windows Server 2022搭建企业AD域(附DNS配置避坑指南)

本文详细介绍了如何使用Windows Server 2022搭建企业AD域,提升20+终端的管理效率。通过实战案例和避坑指南,解析AD域的核心价值、部署步骤及DNS配置技巧,帮助企业实现集中权限管理、安全策略统一部署,显著降低IT运维成本。

weixin_30652897的博客 348

对软件架构的一些思维脑图整理

软件架构(software architecture)就是软件的基本结构。合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。百科释义:架构 https://baike.baidu.com/item/%E6%9E%B6%E6%9E%84/13004195架构可细分为业务架构、应用架构、技术架构,业务架构是战略,应用架构是战术,技...

Enweitech Software Works 1万+

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 646

Demo2Reward:用人类演示动态优化VLM奖励模型提示

多模态大模型(VLM)的奖励建模正面临核心瓶颈——静态提示导致语义鸿沟与泛化失效。其本质是将人类判断标准固化为不可更新的文本模板,使奖励信号脱离真实任务意图。Demo2Reward提出范式级改进:以结构化人类演示为元信号,驱动提示权重连续优化,实现从‘结果打分’到‘过程理解’的跃迁。该方法不修改VLM主干,却显著提升RLHF收敛效率与OOD鲁棒性,在医疗、工业质检等场景验证了跨任务迁移与热修复能力。它重新定义了提示工程的技术价值:不是前端微调,而是奖励系统的认知校准基础设施。

weixin_34302798的博客 407

http://www.springframework.org/schema/tx/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间

在新手接触spring框架时可能会出现xml的配置约束问题。如果顺序写错也许会报错哦。 http://www.springframework.org/schema/tx/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间需要有空格。 如上的错误信息,报的就是约束顺序有问题。 前一个是publicID,后一个是System

小龙 3884

STM32 使用IQmath实现SVPWM

文章目录SVPWMIQMATHIQmathLib测试部分程序附件 SVPWM SVPWM是空间矢量脉宽调制(Space Vector Pulse Width Modulation)的简称,通常由三相逆变器的六个功率开关管组成,经过特定的时序和换相所所产生的脉冲宽度调制波,最终输出的波形可能会十分接近理想的正弦波形。 具体如下图所示;左侧为复平面,即空间矢量,右侧为时域的正弦波形; 关于SVPWM原理的文章非常多,这里可以推荐一下网上一个非常不错的教程《SVPWM的原理及法则推导和控制算法详解第五修改版》,

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

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

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

ywl470812087的博客 11万+

Python爬虫实战:如何爬取京东商品评论数据

在本文中,我们介绍了如何使用 Python 爬虫技术爬取京东商品的评论数据。首先,我们分析了京东商品评论的 API 接口和 JSON 数据结构,然后编写了爬虫程序来抓取评论数据,并将数据保存到 CSV 文件中。接着,我们进行了一些基本的数据分析,包括评分分布和简单的情感分析。爬取京东商品评论的数据可以为电商分析、情感分析等提供有价值的信息。你可以在此基础上进行更深入的分析,挖掘更多的商业价值。希望本篇教程能够帮助你了解如何利用 Python 进行电商数据的爬取和分析!

2201_76125261的博客 1646

知识图谱中的 Ontology(本体论)

1980年,本体论(Ontology)哲学概念“本体”被引入到人工智能领域用来刻画知识。本体概念模型、明确、形式化、共享。本体是实体存在形式的描述,往往表示为一组概念定义和概念之间的层级关系,本体框架形式树状结构,通常被用来为知识图谱定义schema。如人、公司、车等都可以在具体场景下称为本体。Ontology是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。Ontology。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2028

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

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

脑壳疼 5118

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot、Spring Cloud实现原理

Spring、Spring Boot、Spring Cloud实现原理

tszc95的博客 551

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

spring

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

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

通过Spring官网下载Spring jar包

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

1116

如何下载Spring框架

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

liutao2001的博客 2万+

Spring8大模块

Spring8大模块

SSSSSSch的博客 979

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

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

weixin_63009611的博客 1181

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

谢谢你的喜欢 我们一起无限进步 5185
上一篇: J2EE框架思维导图
下一篇: SpringMVC
Mr_Chungh
博客等级 码龄10年 25粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值