Spring6 当中 获取 Bean 的四种方式

1. Spring6 当中 获取 Bean 的四种方式

文章目录

  • 1. Spring6 当中 获取 Bean 的四种方式
  • 每博一文案
    • 1.1 第一种方式:通过构造方法获取 Bean
    • 1.2 第二种方式:通过简单工厂模式获取 Bean
    • 1.3 第三种方式:通过 factory-bean 属性获取 Bean
    • 1.4 第四种方式:通过 FactoryBean 接口 获取 Bean
    • 1.5 BeanFactroy 和 FactroyBean 的区别
  • 2. 将Date 作为复杂类型进行注入(可以自定义 Date 时间类型的格式)
  • 3. 总结
  • 4. 最后:


每博一文案

比如:《杀死一只是更鸟》中提到的
对应我们:我们努力升本,考研,每天都在努力学习,但是某天突然想到万一没有考上的话,那现在的努力又有什么意义呢?
答案:在《杀死一只是更鸟》里有这样一段话:
勇敢是,当你还未开始,你就知道自己会输,可你依然要去做,而且无论如何都要把它坚持到底,你很少能赢,但有时也会。努力的这个过程本身就是有意义,能够获得理想的结果当然很好,但如果失败了也没关系。因为你的勇敢,从未辜负你的青春,而黎明的光亮,总有一刻,会照亮穿梭于黑暗之中的自己。
况且,你还不一定会输呢。

Spring 为Bean 的获取提供了多种方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活)

  1. 第一种:通过构造方法实例化,获取 Bean对象
  2. 第二种:通过简单工厂模式实例化,获取Bean对象
  3. 第三种:通过factory-bean 属性,获取Bean对象
  4. 第四种:通过对FactoryBean 接口的实例化,获取Bean对象

1.1 第一种方式:通过构造方法获取 Bean

简单的说:就是通过在spring的配置文件中,进行一个配置,从而调取其中 Bean 的构成方法,获取到 对应的Bean对象。

准备工作:通过 maven 导入 Spring6的框包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rainbowsea</groupId><artifactId>spring6-005-bean-instantiation-blog</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.11</version></dependency><!-- junit4 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies></project>

这里我们创建一个User 的类,方便我们进行一个,测试。为了测试效果,更加明显,这里这个User类就定义成一个空的类吧
在这里插入图片描述
配置相关的 spring.xml 配置文件信息内容,告知 Spirng 框架,帮我们进行一个管理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<?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 --><bean id="user" class="com.rainbowsea.Bean.User"></bean>
</beans>

运行测试,看是否能够,获取到我们想要的这个 User 类对象。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {@org.junit.Testpublic void test() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");User user = applicationContext.getBean("user", User.class);System.out.println(user);}
}

从上述结果,我们通过构造方法,获取到了 Bean 对象。

1.2 第二种方式:通过简单工厂模式获取 Bean

第一步: 定义一个Bean,还是使用 User 对象
在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 第二步: 编写简单工厂模式当中的工厂类。关于简单工厂模式的内容,大家可以移步至:✏️✏️✏️ (链接)

了解更多。注意: 这里的 User 对象,本质上,还是我们程序员自己给 new 出来的,并不是 Spring 帮我们弄的。

在这里插入图片描述


/*** 特点:它是简单工厂模式(静态工厂模式),是静态的一个方法**/
public class UserFactory {public static User get() {// 本质上,还是我们自己程序员自己 new 出来的return new User();}
}

第三步:在Spring配置文件中指定创建该Bean的方法(使用factory-method属性指定)

通过简单工厂模式,你需要在Spring当中配置文件种告诉 Spring框架,调用哪个类当中的哪个方法可以获取到这个你要的 Bean; factory-method 指明方法()对应方法的小写。

factory-method= 属性我们这里指定的是 UserFactory 工厂类当中静态方法,也就是告诉Spring 框架,调用方法可以获取到你要的Bean 对象。

在这里插入图片描述

<?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"><!--   第二种: 通过简单工厂模式,你需要在Spring当中配置文件种告诉 Spring框架,调用哪个类当中的哪个方法可以获取到这个
你要的 Bean; factory-method 指明方法()对应方法的小写 --><!--    factory-method= 属性指定的时工厂类当中静态方法,也就是告诉Spring 框架,调用方法可以获取到你要的Bean--><bean id="userFactory" class="com.rainbowsea.Bean.UserFactory" factory-method="get"></bean>
</beans>

第四步: 编写测试程序

在这里插入图片描述
在这里插入图片描述

通过: 这样一个配置,就让我们告知了 Spring 框架,你调用那个类当中的哪里方法,就可以获取到我们想要的Bean 对象。

1.3 第三种方式:通过 factory-bean 属性获取 Bean

使用 factory-bean 属性获取 Bean,本质上是,使用23种设计模式当中的工厂方法模式(注意,这里没有错,不了解的,可能会认为是,我写错了,并没有写错这里)。 想要了解关于”工厂方法模式的“,大家可以移步至✏️✏️✏️(链接),了解更多。

**第一步:**定义一个 Bean 对象。这里我们还是使用 User 这里类,进行试验。

在这里插入图片描述

第二步: 既然是工厂方法模式,自然是少不了,工厂了。需要注意这里是工厂方法模式,与静态工厂模式不同,这个生产 Bena 对象的方法,不是静态方法,而是实例化方法 。这也导致了,我们在接下来后续的 spring.xml 配置文件上与第二种 方式有所差异的。注意其中的差异,所使用的标签,不要弄错了。

在这里插入图片描述

package com.rainbowsea.Bean;/*** 特点:它是简单工厂模式(静态工厂模式),是静态的一个方法**/
public class UserFactory {// 工厂方法模式中的具体工厂角色中的方法是:实例方法public User get() {// 相同点是和静态工厂方法模式是一样的:都是我们自己程序员 new 的。// 然后交给 Spring框架管理return new User();}
}

**第三步:**在Spring配置文件中指定factory-bean以及factory-method

上面我们说到,工厂方法模式与静态方法模式,不同点,上是工厂方法模式生产Bean 对象的方法,并不是一个 static() 方法 ,所以,使用的标签属性就有所不同了。

这里我们需要用到以下,两个标签属性,才能让spirng 准确的调用哪个类当中的哪个对象的方法,获取,返回给我们自己想要的 Bean 对象,这里是User 这个 bean对象。

    1. factory-bean 指明哪个对象
    2. factory-method当中的哪个方法;可以获取到你想要的 bean

    简单的说:告诉Spring 通过哪个对象,当中的哪个方法,可以获取到我想要的 Bean 对象

在这里插入图片描述

<?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"><!--    第三种:通过Spring提供的实例化方式,通过工厂方法模式,通过factory-bean 指明哪个对象+factory-method当中的哪个方法;可以获取到你想要的 bean--><!--    简单的说:就是告诉Spring框架,调用哪个对象中的哪个方法,就可以获取到你想要的 Bean了--><bean id="userFactory" class="com.rainbowsea.Bean.UserFactory"> </bean><!--    以下的配置很关键: factory-bean:告诉Spring框架调用哪个对象; factory-method 告诉Spring框架调用哪个方法,可以获取到你要的Bean--><bean id="userBean" factory-bean="userFactory" factory-method="get"></bean>
</beans>

第四步: 测试运行结果。

在这里插入图片描述

import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {@org.junit.Testpublic void test() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");User user = applicationContext.getBean("userBean", User.class);System.out.println(user);}
}

1.4 第四种方式:通过 FactoryBean 接口 获取 Bean

以上的第三种方式中,factory-bean的属性值是我们自定义的,factory-method的属性值也是我们自己定义的。
在Spring中,当你编写的类直接实现FactoryBean接口之后,factory-bean不需要指定了,factory-method也不需要指定了。
factory-bean会自动指向实现FactoryBean接口的类,factory-method会自动指向getObject()方法。

在这里插入图片描述


package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";@NullableT getObject() throws Exception;@NullableClass<?> getObjectType();default boolean isSingleton() {return true;}}

第四种方式:简单的说:就是对第三种方式的一种简化,通过让对应的工厂类是实现该接口implements FactoryBean ,Spring就知道该调用哪个对象,中的哪个方法,获取到你要的 Bean 对象了 。从到到达了某种程度上的简化。

第一步: 定义一个Bean

这里我们还是使用 User 这里类,进行试验。

在这里插入图片描述

第二步: 编写一个(工厂模式当中的)工厂类实现 FactoryBean接口

下面,我们来了解一下,FactoryBean接口下的这个三个方法的作用是干啥的

// 返回我们所需要的 Bean 对象
T getObject() throws Exception;

例如:注意一点:这里还是需要我们自己 new() 出对应所需要的 Bean 对象,而不是 Spirng 弄出来的

@Overridepublic User getObject() throws Exception {return new User();  // 还是需要我们程序员自己 new() 出来}
 /*** 这个方法在接口中有默认实现* 默认返回 true,表示单例的* 如果想多例的化,直接讲这个修改为: return false 即可。* @return*/
default boolean isSingleton() {return true;}
例如:@Overridepublic boolean isSingleton() {return true;  // 单例}

这里我们定义了一个 UserFactory 产生 User 的对象的工厂类,同时实现implements FactoryBean 该接口。

在这里插入图片描述

package com.rainbowsea.Bean;import org.springframework.beans.factory.FactoryBean;/*** 特点:它是简单工厂模式(静态工厂模式),是静态的一个方法**/
public class UserFactory implements FactoryBean<User> {@Overridepublic User getObject() throws Exception {// 本质上还是我们程序员自己 new ()出来的,并不是 Spring 弄出来return new User();}// 这个方法可以不用管它。@Overridepublic Class<?> getObjectType() {return null;}@Overridepublic boolean isSingleton() {return true;  // 单例// false 多例}}

**第三步:**在Spring配置文件中配置FactoryBean

由于我们这个public class UserFactory implements FactoryBean 生产 User 的工厂实现了 FactoryBean 接口,Spring 已经是知道,我们需要调用的是哪个对象当中的哪个方法,从而获取对应的 user Bean对象了。所以对应其中的 spinrg.xml 只需要简单的配置一下,即可。

如下:在这里插入图片描述

将方式的核心就在于:通过一个特殊的Bean(工厂Bean当中的方法)<该工厂实现了 FactoryBean 接口 >,来返回一个普通的Bean 对象。

<?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"><!--   Spring框架中:获取Bean的第四种方式:通过 FactoryBean 接口来实现指明 --><!--    这种方式实际上就是第三种方式的简化--><!--    由于你编写的类实现了FactoryBean接口,那么这个类就是一个特殊的类,不需要你再手动指定: factory-bean;factory-method 哪个对象,哪个方法了,你实现了 FactoryBean 接口,Spring框架就已经知道了,不需要再特殊指明了--><!--    剩下指明是哪个特殊的类就可以了--><!--    通过一个特殊的Bean,工厂Bean,来返回一个普通的Bean person对象--><bean id="userFactory" class="com.rainbowsea.Bean.UserFactory"></bean>
</beans>

在这里插入图片描述

第四步: 运行程序测试。

在这里插入图片描述

package com.rainbowsea.test;import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {@org.junit.Testpublic void test() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");User user = applicationContext.getBean("userFactory", User.class);System.out.println(user);}
}

FactoryBean在Spring中是一个接口。被称为“工厂Bean”。“工厂Bean(通过工厂上的方法返回一个 对应的 Bean 对象)”是一种特殊的Bean。所有的“工厂Bean”都是用来协助Spring框架来创建其他Bean对象的。

1.5 BeanFactroy 和 FactroyBean 的区别

BeanFactory

Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。 BeanFactory是工厂。

在这里插入图片描述

FactoryBean

FactoryBean:它是一个Bean,是一个能够辅助Spring实例化其它Bean对象的一个Bean。
在Spring中,Bean可以分为两类:

  • 第一类:普通Bean
  • 第二类:工厂Bean(记住:工厂Bean也是一种Bean,只不过这种Bean,比较特殊工厂Bean(通过工厂上的方法返回一个 对应的 Bean 对象),从而到达辅助Spring实例化其它Bean对象的效果。)

2. 将Date 作为复杂类型进行注入(可以自定义 Date 时间类型的格式)

在Spring 当中 为什么要将 Date 作为复杂类型进行注入呢?

原因是,在Spring 如果将 Date 作为简单类型进行注入的话,需要特定的时间格式,才能注入成功。

准备工作:定义一个 Bean 类,同时其中含有一个 Date 类型的属性值。

package com.rainbowsea.Bean.myDate;import java.util.Date;public class Vip {private Date birth;public Vip(Date birth) {this.birth = birth;}public Vip() {}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}@Overridepublic String toString() {return "Vip{" +"birth=" + birth +'}';}
}

演示如下:

在这里插入图片描述

警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘vipBean’ defined in class path resource [spring2.xml]: Failed to convert property value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birth’; Cannot convert value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birth’: no matching editors or conversion strategy found

对应Spring当中的 Date 作为简单类型的注入,需要用如下它美国的格式时间格式,才能被识别为 Date 类型。特殊格式如下:

Mon Apr 29 20:03:58 CST 2024

在这里插入图片描述

虽然转化成功了,但是这个格式,对于我们国人来说,不太友好,而且也不好记忆。

所以为了将Date 类型转化为我们国人友好的类型的格式,我们就需要将 Date 定义为 复杂类型

进行 ref 注入。但是怎样将 Date 作为复杂类型注入的同时又可以转换为我们需要的格式呢。——这就需要用到上面我们所学习的通过 FactoryBean接口 获取 Bean 对象了。其实呢,上面第二种方式,第三种方式,第四种方式都是可以实现的。但是第四种方式比较简化,我们这里就用第四种方式来解决。这个问题。

第一步: 定义一个含有 Date 类型的类,就还是使用上面哪个 Vip 类吧

在这里插入图片描述

第二步: 创建一个用于生产我们所需要的格式的 Date的工厂 同时该工厂又实现了 implements FactoryBean 接口。告诉Spring框架,调用其中的哪个对象当中的哪个方法,获取到我们所需要的 Date 对象。

在这里插入图片描述

package com.rainbowsea.Bean.myDate;import org.springframework.beans.factory.FactoryBean;import java.text.SimpleDateFormat;
import java.util.Date;/*** Date 工厂模式* DateFactoryBean 这个工厂Bean 协助我们Spring 创建这个普通的Bean;Date*/
public class DateFactor implements FactoryBean<Date> {// 这个 String字符串类型,作为我们Date类型,进行一个转换private String strDate;public DateFactor() {}public DateFactor(String strDate) {this.strDate = strDate;}public String getStrDate() {return strDate;}public void setStrDate(String strDate) {this.strDate = strDate;}@Overridepublic Date getObject() throws Exception {// 通过 SimpleDateFormat 来自定义我们的 Date 的日期时间类型的格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");// 通过在 spring.xml 对DateFactor类当中的  String strDate 属性进行赋值Date date = simpleDateFormat.parse(this.strDate); // 将字符串类型转换为 Date 日期时间类型return date;  // 转换后返回 Date 类型,进行一个赋值操作}@Overridepublic Class<?> getObjectType() {return null;}@Overridepublic boolean isSingleton() {return true;  // 单例 false 多例}
}

上述代码的核心代码片段讲解:

// 这个 String字符串类型,作为我们Date类型,进行一个转换private String strDate;public Date getObject() throws Exception {// 通过 SimpleDateFormat 来自定义我们的 Date 的日期时间类型的格式SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");// 通过在 spring.xml 对DateFactor类当中的  String strDate 属性进行赋值Date date = simpleDateFormat.parse(this.strDate); // 将字符串类型转换为 Date 日期时间类型return date;  // 转换后返回 Date 类型,进行一个赋值操作}

在这里插入图片描述
通过定义一个Date 类型的工厂类 生产出,我们需要的格式的 Date 类型。

  1. 首先在其 DateFactor 工厂类当中,创建一个 String strDate 用于我们传入日期时间,再通过 new SimpleDateFormat(“yyyy-MM-dd”) 来定义我们的Date 日期时间类型的格式。通过Date date = simpleDateFormat.parse(this.strDate); 将字符串类型转换为 Date 日期时间类型。最后返回一个我们所需要的格式的 Date 类型的日期时间类型。

第三步: 为我们这个 工厂类(生产我们所需的Date日期类型格式),配置到 Spring 当中去,并让 Spirng 框架返回一个我们需要的 Date类型的 Bean 对象,同时作为复杂类型,赋值到 Vip 这个类当中的 birth 属性的值。

在这里插入图片描述

在这里插入图片描述

<?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"><!--    指明通过DateFactor 获取到一个我们所需要的格式的 Date 类型--><bean id="myDateBean" class="com.rainbowsea.Bean.myDate.DateFactor"><property name="strDate" value="1980-01-01"></property></bean>
<!--    获取到之后,作为复杂类型,赋值给 Vip 当中的 Date birth 属性值--><bean id="vipBean" class="com.rainbowsea.Bean.myDate.Vip"><property name="birth" ref="myDateBean"></property></bean>
</beans>

第四步: 运行程序测试

在这里插入图片描述

核心要素就是:通过一个(这里时生产我们所需格式的 Date 类型的)工厂类实现 FactoryBean接口,被称为“工厂Bean”。“工厂Bean(通过工厂上的方法返回一个对应的 Bean(这里时 Date ) 对象)”是一种特殊的Bean。获取到对应 Date 后,再作为 复杂类型作为其他类上的属性的值存在。

3. 总结

  1. 第一种通过构造方法获取 Bean:简单的说:就是通过在spring的配置文件中,进行一个配置,从而调取其中 Bean 的构成方法,获取到 对应的Bean对象。

  2. 第二种方式:通过简单工厂模式获取 Bean;注意时工厂类中生产对应的Bean对象是静态方法()。同时其中的 Bean 本质上还是程序员自己 new()出来的。

    1. 通过简单工厂模式,你需要在Spring当中配置文件种告诉 Spring框架,调用哪个类当中的哪个方法可以获取到这个你要的 Bean; factory-method 指明方法()对应方法的小写。

      factory-method= 属性我们这里指定的是 UserFactory 工厂类当中静态方法,也就是告诉Spring 框架,调用方法可以获取到你要的Bean 对象。

  3. 第三种方式:通过 factory-bean 属性获取 Bean;使用 factory-bean 属性获取 Bean,本质上是,使用23种设计模式当中的工厂方法模式。(注意 其中的工厂类当中的生产对应 Bean的方法是实例方法(不是静态方法),其中的 Bean 本质上还是程序员自己 new()出来的 )

    1. 这里我们需要用到以下,两个标签属性,才能让spirng 准确的调用哪个类当中的哪个对象的方法,获取,返回给我们自己想要的 Bean 对象,这里是User 这个 bean对象。
        1. factory-bean 指明哪个对象
        2. factory-method当中的哪个方法;可以获取到你想要的 bean
  4. 第四种方式:通过 FactoryBean 接口 获取 Bean;简单的说:就是对第三种方式的一种简化,通过让对应的工厂类是实现该接口implements FactoryBean ,Spring就知道该调用哪个对象,中的哪个方法,获取到你要的 Bean 对象了 。从到到达了某种程度上的简化。

    1. 该方式的核心就在于:通过一个特殊的Bean(工厂Bean当中的方法)<该工厂实现了 FactoryBean 接口 >,来返回一个普通的Bean 对象。
  5. BeanFactroy 和 FactroyBean 的区别

  6. 将Date 作为复杂类型进行注入(可以自定义 Date 时间类型的格式);

    1. 对应Spring当中的 Date 作为简单类型的注入,需要用如下它美国的格式时间格式,才能被识别为 Date 类型。

    2. 核心要素就是:通过一个(这里时生产我们所需格式的 Date 类型的)工厂类实现 FactoryBean接口,被称为“工厂Bean”。“工厂Bean(通过工厂上的方法返回一个对应的 Bean(这里时 Date ) 对象)”是一种特殊的Bean。获取到对应 Date 后,再作为 复杂类型作为其他类上的属性的值存在。

4. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面&#xff1f;新建子模块界面&#xff01; 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务&#xff0c;并且使用的技术栈也相当丰富&#xff0c;但是目前只提…

Docker 中安装单体架构 Redis 的 Shell 脚本

该脚本用于实现 root 用户在 Linux 操作系统下的 Docker 中安装单体架构 Redis Shell 脚本 Git 仓库地址 Gitee&#xff1a;https://gitee.com/tongchaowei/common-shell/tree/main/root 执行脚本 bash ./docker-redis-install-single.sh需要注意的 该脚本会先检查是否安…

数学建模--图论最短路径基础

1.图的定义 学过数据结构或者离散数学的小伙伴们应该知道图的概念&#xff0c;我在这里简单的介绍一下&#xff1a; 图的概念和我们理解的是很不一样的&#xff0c;这里的图并不是我们的生活里面的图片&#xff0c;而是一种表示不同的数据之间的关系&#xff0c;例如这里的5个…

C++中auto关键字的用法详解

1.简介 auto作为一个C语言就存在的关键字&#xff0c;在C语言和C之间却有很大区别。 在C语言中auto修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;但因为局部变量默认类别默认是auto修饰导致一直没有人去使用它。 C11中&#xff0c;标准委员会赋予了auto全新…

XY_RE复现(二)

一&#xff0c;何须相思煮余年 0x55 0x8b 0xec 0x81 0xec 0xa8 0x0 0x0 0x0 0xa1 0x0 0x40 0x41 0x0 0x33 0xc5 0x89 0x45 0xfc 0x68 0x9c 0x0 0x0 0x0 0x6a 0x0 0x8d 0x85 0x60 0xff 0xff 0xff 0x50 0xe8 0x7a 0xc 0x0 0x0 0x83 0xc4…

【智能算法】火烈鸟搜索算法(FSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;W Zhiheng等人受到火烈鸟迁徙觅食行为启发&#xff0c;提出了火烈鸟搜索算法&#xff08;Flamingo Search Algorithm, FSA&#xff09;。 2.算法原理 2.1算法思想 FSA受到火烈鸟…

C++|STL简介-string-vector基础运用

目录 什么是STL STL里面有什么 容器 string 序列式容器 vector deque list 关联式容器 set multiset map multimap 算法 非可变序列算法 可变序列算法 排序算法 数值算法 什么是STL STL(标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一…

MVC架构简述

MVC简介 MVC 是一种非常常见且常用的分层架构&#xff0c;主要包括&#xff1b;M - mode 对象层&#xff0c;封装到 domain 里。V - view 展示层&#xff0c;但因为目前都是前后端分离的项目&#xff0c;几乎不会在后端项目里写 JSP 文件了。C - Controller 控制层&#xff0c…

站群SEO优化策略及其遭遇DDoS攻击时的应对方法

一、站群SEO优化策略 站群优化主要是指通过合理布局和内容优化提升一系列网站在搜索引擎中的整体排名表现。以下是一些关键步骤与相关代码示例&#xff08;以WordPress为例&#xff09;&#xff1a; 差异化内容建设&#xff1a; 每个站点的内容必须具有独立性和价值性&#x…

CSS-vminvmax单位

vmin 和 vmax 单位 vmin 是相对于视口宽度和高度中较小值进行计算&#xff0c;它的值为视口宽度和高度中的较小值的百分比。 例如&#xff0c;如果视口宽度为 800px&#xff0c;高度为 1000px&#xff0c;那么 1vmin 等于 8px&#xff08;800px 的 1%&#xff09;。 vmax 是…

【Unity基础】TextMeshPro组件学习过程记录

目录 1.TextMeshPro组件渲染创建文本RTL Editor字体Font Asset字体加粗&#xff0c;下划线等字体大小控制字体颜色控制字体渐变控制字符间隔、单词间隔、行间距、段落间距控制WrappingUV映射控制代码 2.TextMeshPro组件AssetFace InfoGeneration Setting 3.使用Dynamic SDF Sys…

【可视化3D卷积计算过程】

目录 1. 可视化过程2. 代码验证 前言&#xff1a;开始处理视频数据&#xff0c;遇到了陌生又熟悉的3D卷积&#xff0c;但对其计算过程有点疑惑&#xff0c;网上也没找到什么可视化动画&#xff0c;所以研究明白并做个记录&#xff0c;方便日后复习。有点简化&#xff0c;但认真…

基于FCN网络实现的多类别图像分割任务

1、前言 FCN 作为图像分割的开山之作&#xff0c;将分割任务作为逐个像素点的分类任务 之前完成了基于unet、resnetunet、deeplab等等网络的分割任务&#xff0c;具体的可以参考本专栏&#xff1a; 图像分割_听风吹等浪起的博客-CSDN博客 因为FCN网络的实现较为复杂&#xf…

杰发科技AC7840——CAN通信简介(7)_波形分析

参考&#xff1a; CAN总线协议_stm32_mustfeng-GitCode 开源社区 0. 简介 隐形和显性波形 整帧数据表示 1. 字节描述 CAN数据帧标准格式域段域段名位宽&#xff1a;bit描述帧起始SOF(Start Of Frame)1数据帧起始标志&#xff0c;固定为1bit显性(b0)仲裁段dentify(ID)11本数…

网安行业拐点!网络安全6大企业2023年报盘点

回顾2023&#xff1a;寒冬中的市场概览 2023年&#xff0c;网络安全行业经历了前所未有的挑战。全球经济波动与行业竞争加剧&#xff0c;加之下游客户预算收紧&#xff0c;招投标流程延长&#xff0c;使得整个行业感受到了冬日的严寒。裁员和不发年终奖金的决定在行业中成为普…

记录些RAG-Fusion、Agent、NL2SQL的问题

RAG-Fusion RAG-Fusion 的实现原理 Query Duplication with a Twist&#xff1a;用 LLM 根据用户的 Query 生成几个相关的但不同的 Queries。Vector Search Unleashed&#xff1a;对原 Query 和生成的 Queries 都进行向量&#xff08;或者其他方式的&#xff09;搜索。Intell…

DiffusionGAN ——最快的小波扩散模型应用研究

介绍 扩散模型最近出现并迅速发展&#xff0c;吸引了许多研究人员的兴趣。这些模型能从随机的噪声输入生成高质量的图像。在图像生成任务中&#xff0c;它们的表现尤其优于最先进的生成模型&#xff08;GANs&#xff09;。扩散模型可以灵活地处理各种条件输入&#xff0c;从而…

meterpreter运行run getgui -e报错

meterpreter运行run getgui -e报错 meterpreter > run getgui -e [!] Meterpreter scripts are deprecated. Try post/windows/manage/enable_rdp. [!] Example: run post/windows/manage/enable_rdp OPTIONvalue [...] [-] The specified meterpreter session script cou…

【C++第三阶段】list容器排序

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值和交换大小操作插入和删除数据存取反转和排序排序案例 list容器在STL中是双向循环链表。 如图所示&#xff0c;每一个节点三个域&#xff0c;前向指针域&#xff0c;后…

用户中心(上)

文章目录 企业做项目流程需求分析技术选型计划初始化项目数据库设计登录/注册⽤户管理&#xff08;仅管理员可⻅&#xff09; 初始化项目⼀、前端初始化1.下载nodejs2.Ant Design Pro相关问题1.前端项目启动时报错、无法启动&#xff1f;2.如何初始化前端项目&#xff1f;为什么…