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

Spring Bean定义有哪些方式?

概述

对于学习Spring的兄弟姐妹来说,觉得这个问题很熟悉,若是要把它回答得很清楚,却是很为难?平时写代码的时候,不会在意这些概念问题,但面试时这个问题出现的频率却是很高,所以还是必须要掌握和理解。

Spring Bean定义有哪些方式?

总的来说,分三种:
1)基于xml的方式
2)基于注解的方式
3)基于java类的方式

1、基于xml的方式

XML配置的方式,是Spring最早支持的方式,不过现在XML方式已经用的比较少了,基本上都是用后面的配置方式替代了。

示例:

@Data
@ToString
public class Student {String name;int age;
}
<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="student" class="com.koo.entity.Student"/>
</beans>
public class Client {public static void main(String[] args) {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");System.out.println(applicationContext.getBean("student"));}
}

2、基于注解的方式

又分一下几种方式
1) 使用@Component注解 + @ComponentScan包扫描方式
2)@Configuration + @Bean方式
3)FactoryBean方式
4)@Import方式
5)@Import + ImportSelector方式
6)@Import + ImportBeanDefinitionRegistrar方式
7)BeanDefinitionRegistryPostProcessor方式
8)BeanFactoryPostProcessor方式

1) 使用@Component注解 + @ComponentScan包扫描方式

为了解决bean太多时,XML文件过大,从而导致膨胀不好维护的问题。在Spring2.5中开始支持:

@Component、@Repository、@Service、@Controller等注解定义bean。@Component放在类名上面,然后通过@ComponentScan指定一个路径,Spring进行扫描带有@Componet注解的bean,然后加至容器中。

@Component
public class UserHandler {
}
@Service
public class UserService {
}
@Repository
public class UserDao {
}
@Controller
public class UserController {
}
@ComponentScan("com.koo.modules")
@Configuration
public class AppConfig {
}
/*** 通常情况下: ** @Controller:一般用在控制层* @Service:一般用在业务层* @Repository:一般用在持久层* @Component:一般用在公共组件上*/
public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("userDao"));System.out.println(applicationContext.getBean("userService"));System.out.println(applicationContext.getBean("userController"));System.out.println(applicationContext.getBean("userHandler"));}
}

2)@Configuration + @Bean方式

这种方式其实也是我们最常用的方式之一,@Configuration用来声明一个配置类,然后使用 @Bean 注解声明一个bean,将其加入到Spring容器中。通常情况下,如果项目中有使用到第三方类库中的工具类的话,我们都是采用这种方式注册Bean。

示例代码:

public class Student {
}
@Configuration
public class AppConfig {@Beanpublic Student student() {return new Student();}}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("student"));}
}

3)FactoryBean方式

FactoryBean是一个Bean,它允许我们自定义Bean的创建,主要有三个方法:

1、getObject():自定义Bean如何创建;
2、getObjectType():要注册的Bean的类型;
3、isSingleton():是否单例;

示例代码:

public class User {
}
@Component
public class UserFactoryBean implements FactoryBean<User> {@Overridepublic User getObject() throws Exception {return new User();}@Overridepublic Class<?> getObjectType() {return User.class;}@Overridepublic boolean isSingleton() {return true;}
}
@Configuration
@ComponentScan("com.koo. modules")
public class AppConfig {}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("userFactoryBean"));System.out.println(applicationContext.getBean("&userFactoryBean"));}
}

4)@Import方式

public class Student {
}
@Import({Student.class})
@Configuration
public class AppConfig {}

public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);for (String beanDefinitionName : applicationContext.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}System.out.println("================");System.out.println(applicationContext.getBean("com.koo.modules.entity.Student"));System.out.println(applicationContext.getBean("student"));}
}

5)@Import + ImportSelector方式

首先介绍一下ImportSelector接口的好处,主要有以下两点:

1、把某个功能的相关类放到一起,方面管理和维护。
2、重写selectImports方法时,能够根据条件判断某些类是否需要被实例化,或者某个条件实例化这些bean,其他的条件实例化那些bean等,我们能够非常灵活的定制化bean的实例化。

public class Product {
}
public class User {
}
public class MyImportSelector implements ImportSelector {// 指定需要定义bean的类名,注意要包含完整路径,而非相对路径@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"com.koo.entity.Product", "com.koo.entity.User"};}}

@Import({MyImportSelector.class})
@Configuration
public class AppConfig {

}


public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);for (String beanDefinitionName : applicationContext.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}		System.out.println(applicationContext.getBean("com.koo.entity.Product"));try {System.out.println(applicationContext.getBean("product"));} catch (Exception e) {e.printStackTrace();}	System.out.println(applicationContext.getBean("com.koo.entity.User"));try {System.out.println(applicationContext.getBean("user"));} catch (Exception e) {e.printStackTrace();}}
}

6)@Import + ImportBeanDefinitionRegistrar方式

这种方式我们需要实现ImportBeanDefinitionRegistrar接口,并重写registerBeanDefinitions()方法,然后定义我们需要注册的Bean的定义信息,然后registry.registerBeanDefinition()方法注册即可。这种方式比ImportSelector更加灵活,可以自定义bean的名称、作用域等很多参数。 像我们常见的Spring Cloud中的Feign,就使用了ImportBeanDefinitionRegistrar,具体可以参考FeignClientsRegistrar类

public class User {
}public class Product {
}public class CustomImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {// 可以自定义bean的名称、作用域等很多参数registry.registerBeanDefinition("user", new RootBeanDefinition(User.class));RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Product.class);rootBeanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);registry.registerBeanDefinition("product", rootBeanDefinition);}
}@Import({CustomImportBeanDefinitionRegistrar.class})
@Configuration
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("product"));System.out.println(applicationContext.getBean("user"));}
}

7)BeanDefinitionRegistryPostProcessor方式

在Spring容器启动方法refresh()方法的invokeBeanFactoryPostProcessors()方法中,会执行 BeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry()方法,它允许对beanDefinition进行后置处理,我们可以在这个方法调整IOC容器中的beanDefinition定义信息,从而干扰到后面bean初始化的过程。

具体代码如下:

public class User {
}@Component
public class CustomBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {registry.registerBeanDefinition("user", new RootBeanDefinition(User.class));}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
}@Configuration
@ComponentScan("com.koo.modules")
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("user"));}
}

8)BeanFactoryPostProcessor方式

其实BeanDefinitionRegistryPostProcessor就是继承自BeanFactoryPostProcessor,所以使用BeanFactoryPostProcessor也可以实现注册Bean的功能。它们的区别如下:

1、 BeanDefinitionRegistryPostProcessor:侧重于bean的注册;
2、 BeanFactoryPostProcessor:侧重于对已经注册的bean的属性进行修改,虽然也可以注册bean;

public class Product {
}@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {DefaultListableBeanFactory registry = (DefaultListableBeanFactory) beanFactory;registry.registerBeanDefinition("product", new RootBeanDefinition(Product.class));}
}@Configuration
@ComponentScan("com.koo.modules")
public class AppConfig {}public class Client {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);System.out.println(applicationContext.getBean("product"));}
}

3、基于Java类的方式

1.使用@Configuration注解需要作为配置的类,表示该类将定义Bean的元数据
2.使用@Bean注解相应的方法,该方法名默认就是Bean的名称,该方法返回值就是Bean的对象。
3.AnnotationConfigApplicationContext或子类进行加载基于java类的配置

@Configuration  
public class BeansConfiguration {  @Bean  public Student student(){  Student student=new Student();  student.setName("张三");  student.setTeacher(teacher());  return student;  }  @Bean  public Teacher teacher(){  Teacher teacher=new Teacher();  teacher.setName("李四");  return teacher;  }  
}  
public class Client{  public static void main(String args[]){  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class);  Student student = (Student) context.getBean("student");Teacher teacher = (Teacher) context.getBean("teacher");System.out.println("学生的姓名:" + student.getName() + "。老师是" + student.getTeacher().getName());  System.out.println("老师的姓名:" + teacher.getName());  }  } 

示例源码:https://gitee.com/charlinchenlin/koo-erp

相关文章:

Spring Bean定义有哪些方式?

概述 对于学习Spring的兄弟姐妹来说&#xff0c;觉得这个问题很熟悉&#xff0c;若是要把它回答得很清楚&#xff0c;却是很为难&#xff1f;平时写代码的时候&#xff0c;不会在意这些概念问题&#xff0c;但面试时这个问题出现的频率却是很高&#xff0c;所以还是必须要掌握…...

JVM内存模型的演变

1&#xff0c;背景 class文件、类的加载过程。我们的class文件就要进入到JVM内存里&#xff0c;我们沿着经典的JDK1.6&#xff0c;JDK1.7&#xff0c;JDK1.8看看在其中都经历了哪些改变 概念的统一&#xff1a; 方法区&#xff1a; 方法区可以看作是JVM逻辑上管理一片区域的…...

DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks数据库

DataX3同步Mysql数据库数据到Mysql数据库和DataX3同步mysql数据库数据到Starrocks 一、认识DataX二、DataX3概览三、DataX3框架设计四、DataX3插件体系五、DataX3核心架构六、DataX 3六大核心优势1.可靠的数据质量监控2.丰富的数据转换功能3.精准的速度控制4.强劲的同步性能5.健…...

你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?

这里写目录标题 一、 前言二、高质量代码的特征三、编程实践技巧1. 遵循编码规范2. 使用有意义的变量名和函数名3. 减少代码重复4. 使用注释5. 编写单元测试6. 使用设计模式7. 使用版本控制工具8. 保持代码简洁9. 优化代码性能10. 学习和借鉴他人的代码总结 一、 前言 写出高质…...

常用 Composition API【VUE3】

二、常用 Composition API 7. 计算属性与监视 7.1 computed函数 与Vue2.x中computed配置功能一致写法 <template><h1>一个人的信息</h1>姓&#xff1a;<input type"text" v-model"person.firstName"><br><br>名&a…...

--商业模式--

O2O O2O&#xff0c;网络用语中指Online To Offline的缩写&#xff0c;即在线离线/线上到线下&#xff0c;是指将线下的商务机会与互联网结合&#xff0c;让互联网成为线下交易的平台。 O2O概念最早来源于美国。O2O的概念非常广泛&#xff0c;既可涉及到线上&#xff0c;又可…...

JavaWeb《HTML基础标签》

本笔记学习于Acwing平台 MDN官方文档https://developer.mozilla.org/zh-CN/ 目录 1. html文件结构 2. 文本标签 3. 图片 4. 音频和视频 5. 超链接 6. 表单 7. 列表 8. 表格 9. 语义标签 10. 特殊符号 1. html文件结构 文档结构 html的所有标签为树形结构&#xff…...

ChatGpt 能取代人类吗?

目录 前言 一、ChatGpt是什么&#xff1f; 二、ChatGpt能做什么 总结 前言 随着人工智能的不断发展&#xff0c;很多人都开启了学习机器学习&#xff0c;以及现在ChatGpt的出现&#xff0c;对人类社会带来了很多变化。 智能化交流方式&#xff1a;ChatGpt的出现为人们提供了…...

PHP内存溢出Allowed memory size of 解决办法

以前追踪过这个问题,但是那个时候工具用的不太好,没看的这么细,这次搞的比较细,修正了偶以前的看法 .于是写小文一篇总结一下. PHP偶尔会爆一下如下 错误Allowed memory size of xxx bytes exhausted at xxx:xxx (tried to allocate xxx bytes) 不想看原理的,直接跳到最后…...

重回代码,学习总结

回顾加总结 2021年 自动化测试 1.ETL 数据库开发维护(oracle pl/sql) 2.自动化测试(javaseleniumcucumber) 2022年 功能测试 1.功能测试&#xff08;学习测试用例&#xff0c;postman测试&#xff09; 2.性能测试&#xff08;jmeter初学&#xff09; 2023年 测试开发 1.学习了…...

【Leetcode -86.分隔链表 -92.反转链表Ⅱ】

Leetcode Leetcode -86.分隔链表Leetcode -92.反转链表Ⅱ Leetcode -86.分隔链表 题目&#xff1a;给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每…...

算法记录 | 48 动态规划

198.打家劫舍 思路&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;前 i 间房屋所能偷窃到的最高金额。 2.确定递推公式&#xff1a;dp[i] max(dp[i - 2] nums[i-1], dp[i - 1]) i间房屋的最后一个房子是nums[i−…...

CRM部署Always on 后 CRM报无法更新数据库,数据库只读,且读写分离不正常

CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读&#xff0c;读写分离不正常 问题描述背景信息问题原因解决方案 问题描述 CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读 读写分离不正常,出现错乱链接。 背景信息 1.2个节点配置SQL serve…...

麓言信息设计创意思维,打开设计师思路

在现在快速发展的时代&#xff0c;信息纷杂繁琐&#xff0c;如果一个设计不能让人眼前一亮&#xff0c;印象深刻&#xff0c;只会沦为平凡作品&#xff0c;无亮点无用处。正所谓&#xff0c;无设计不创意&#xff0c;这句口号正是喊出对设计的要求。   伴随着时代的发展、…...

POJ3704 括号匹配问题 递归方法

目录 题目 算法 完整代码 题目 参考 递归: https://blog.csdn.net/qq_45272251/article/details/103257953 利用了递归, 但思路稍复杂了 循环: https://blog.csdn.net/weixin_50340097/article/details/114579805 (看起来是递归其实是循环. 每次递归其实是循环内一次迭…...

leetcode — JavaScript专题(三):完全相等的 JSON 字符串、复合函数、 分组、柯里化、将对象转换为 JSON 字符串

专栏声明&#xff1a;只求用最简单的&#xff0c;容易理解的方法通过&#xff0c;不求优化&#xff0c;不喜勿喷 2628. 完全相等的 JSON 字符串 题面 给定两个对象 o1 和 o2 &#xff0c;请你检查它们是否 完全相等 。 对于两个 完全相等 的对象&#xff0c;它们必须包含相…...

OGNL 的表达式

目录 概念 基本原理 基本语法 1、访问Root区域对象基本语法 2、访问Context区域对象基本语法 符号含义 概念 Object-Graph Navigation Language 对象-图形导航语言&#xff0c; 主要用于访问对象的数据和方法。 基本原理 主要由3部分构成&#xff1a;1.OGNL引擎 …...

JAVA面试中遇到的那些坑,80%的人都种过招

面试&#xff0c;是很多学完Java开发的人不得不面对的问题。小编经常听到学员抱怨&#xff0c;明明觉得自己学的不错&#xff0c;为什么到了面试的时候就凉凉了?为什么有的面试官会一直问业务层面的问题&#xff0c;让人措手不及? 其实&#xff0c;我们在学习Java知识的同时…...

【测试开发】单元测试、基准测试和性能分析(以 Go testing 为例)

一、为什么需要测试&#x1f914;️ 你写不出 bug-free 的代码。你认为自己写出了 bug-free 的代码&#xff0c;但它在你意想不到的地方出错了。你觉得自己写出了永不出错的代码&#xff0c;但它的性能十分糟糕。 二、在开发过程中做好测试&#xff08;理想情况下&#xff09;…...

linux中一条命令查询当前端口的进程,然后拿到进程pid,作为另一条杀死进程的参数

1. 可以使用lsof命令来查询端口对应的进程&#xff0c;然后使用awk命令提取PID&#xff0c;最后将其作为另一条命令的参数。 例如&#xff0c;如果要查询端口为8080的进程&#xff1a; lsof -i :8080 | awk NR2{print $2}其中&#xff0c;-i选项指定查询网络连接&#xff0c;…...

程序员找工作难吗?我用亲身经历来告诉大家

我看到很多同学说今年的程序员找工作难。我的心里也有一定预期&#xff0c;但直到我出来之后才真正地感受到这股寒冬有多么凛冽。 一个外包公司有四五个招聘人员&#xff0c;然后外包公司有十来个&#xff0c;一个公司的岗位会分发给这些各个不同的外包公司。所以你看到我沟通…...

【Web服务】HTTP和DNS重要知识

304状态码 HTTP状态码中的304状态码表示"未修改"&#xff0c;通常在客户端发起了一个带有If-Modified-Since头部的GET请求时会得到这个响应。服务器通过比较If-Modified-Since头部指定的时间戳和资源的最后修改时间来判断资源是否被修改过&#xff0c;如果没有修改则…...

【C++】-关于类和对象的默认成员函数(中)-拷贝构造函数和赋值运算符重载函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…...

c++11上篇

c11 1.C11简介2.列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3.变量类型推导3.1 auto3.2 decltype3.3 nullptr 4.范围for循环5.final与override6.智能指针7.新增加容器---静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引…...

异构无线传感器网络路由算法研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 ​无线传感器网络(Wireless Sensor Networks, WSN)是一种新型的融合传感器、计算机、通信等多学科的信息获取和处理技术的网络,…...

MySQL数据库——MySQL TRUNCATE:清空表记录

MySQL 提供了 DELETE 和 TRUNCATE 关键字来删除表中的数据。下面主要讲解一下 TRUNCATE 关键字的使用。 TRUNCATE 关键字用于完全清空一个表。其语法格式如下&#xff1a; TRUNCATE [TABLE] 表名 其中&#xff0c;TABLE 关键字可省略。 例 1 新建表 tb_student_course&…...

财报解读:连续三年逆势增长的背后,欧派家居到底靠的是什么?

能在过去3年逆势增长的家居企业并不多&#xff0c;而欧派家居就是其中一个。4月25日&#xff0c;欧派家居发布2022年年度报告。据年报数据显示&#xff0c;2022年&#xff0c;欧派家居共实现营业收入224.80亿元&#xff0c;净利润约26.88亿元。 从2020年到2022年&#xff0c;欧…...

希望计算机专业同学都知道这些宝藏博主

湖科大教书匠——计算机网络 “宝藏老师”、“干货满满”、“羡慕湖科大”…这些都是网友对这门网课的评价&#xff0c;可见网课质量之高&#xff01; 湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程&#xff0c;用简单的语言描述复杂的问题&#xff0c;…...

1694_week1_MIT使用Python编程学习手记1

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 首先说明一下&#xff0c;这部分信息的整理只是我个人的理解。由于自己的知识功底以及英语水准&#xff0c;很可能会有大量的疏漏。再此&#xff0c;我只想把自己学习时候的一…...

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…...

公司做网站的费用计什么科目/郑州百度seo网站优化

再看case语句&#xff0c;case语句只处理单条记录&#xff0c;而不是set 列名的使用&#xff0c;可以当做数值来使用&#xff1b; case when 后面简直是完美的的&#xff0c;什么东西都是能放的&#xff0c;只要是一个逻辑上的true/false的逻辑就可以&#xff1b; 执行顺序之加…...

做网站去哪里备案/陕西省人民政府

1.Tabu Search基本概念2. Tabu Search算法实现细节3. 问题与总结1.Tabu Search基本概念禁忌搜索(Tabu Search,TS&#xff0c;以下简称TS) 是一种基于邻域搜索策略的元启发式算法&#xff0c;由Fred W. Glover 在1986提出[1]&#xff0c;并于1989构建[2][3]。应用于各类组合优化…...

网站开发的技术栈/软文营销文章范文

基于文件流的读取与写入是Android平台上的数据存取方式之一。 在Android中&#xff0c;可以通过Context.openFileInput和Context.openFileOutput来分别获取FileInputStream和FileOutputStream。 openFileInput(String fileName); 打开应用程序私有目录下的指定私有文件以读…...

定制网站制作报价/百度seo快速排名优化服务

1. JNA简单介绍先说JNI(Java Native Interface)吧&#xff0c;有过不同语言间通信经历的一般都知道&#xff0c;它允许Java代码和其他语言(尤其C/C)写的代码进行交互&#xff0c;只要遵守调用约定即可。首先看下JNI调用C/C的过程&#xff0c;注意写程序时自下而上&#xff0c;调…...

公司网站建设设计公司排名/数据分析平台

截取第三个/后的字符串方法&#xff1a;//先使用spilt按/分割符 分割字符串 成数组aa"/a1Wsm6EWNcQ/${deviceName}/user/topicname2";var bb new Array();bb aa.split("/");var ccbb.slice(3);console.log(cc); //cc 为["user", "topicnam…...

美团推广联盟/seo深圳培训班

leetcode 30题目大意算法思想hashtable的理解双指针的理解some tricks一个for循环我们可以写了呀hashtable的应用写写代码吧题目 you are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s …...