关于@Autowired的三种用法
@Autowired在IDEA的警告在使用spring框架时,我们使用@Autowired实现依赖注入时,IDEA经常会出现警告不建议使用字段注入,要弄懂这个警告,我们得了解@Autowired注入的方式,和他们的各自的优缺点。
@Autowired三种用法字段注入字段注入是最常用的@Autowired注入方法,就是在要注入的组件上直接注解@Autowired;
12345@RestControllerpublic class AlphaController { @Autowired private AlphaDao alphaDao;}
优点:
字段注入十分简单,要修改时,修改的代码很少;
缺点:
不能使用final关键字,可能会导致空安全(空指针)问题,因为注入后的属性,只有真正使用时才能拿到。如果一开始注入的是null,可能会因为一直不调用而导致无法发现NullPointException存在;
和IoC高度耦合,无法重新设置注入的属性,无法脱离容器访问目标对象
可能导致循环依赖(A依赖B,B依赖A)
构造器注入构造器注入是spring官 ...
Maven指南
Maven实用使用技巧,配置和指令
Springboot2入门指南1
Springboot2入门指南实用文档1
Springboot2入门指南2
Springboot2入门指南实用文档2
计算机网络3
数据链路层数据链路层使用的信道主要有以下两种类型:
点对点信道
广播信道
3.1使用点对对信道的数据链路层3.1.2数据链路和帧链路和数据链路并不是一个东西
链路:从一个结点到相邻结点的一段物理线路,中间没有任何交换结点。
数据链路:当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些通信协议利啊控制这些数据的传输。把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用网络适配器(如拨号上网使用拨号适配器,通过以太网上网使用局域网适配器)来实现这些协议。一般的适配器都包括了数据链路层和物理层的功能。
规程:早期的数据通信协议曾叫作通信规程,因此在数据链路层,规程和协议是同义语
帧:数据链路层的协议数据但元叫做帧。
数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。在互联网中,网络层协议数据单元就是IP数据报(或简称为数据报,分组或包)
点对点信道的数据链路层通信的主要步骤:
结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧
结点A把封装好的帧发送给结点B的数据链路层
若结点B的 ...
数据结构一
Trie树作用高效地存储和查找字符串集合的数据结构
实现123456789101112131415161718192021222324252627282930int son[N][26], cnt[N], idx;// 0号点既是根节点,又是空节点// son[][]存储树中每个节点的子节点// cnt[]存储以每个节点结尾的单词数量// 插入一个字符串void insert(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { int u = str[i] - 'a'; if (!son[p][u]) son[p][u] = ++ idx; p = son[p][u]; } cnt[p] ++ ;}// 查询字符串出现的次数int query(char *str){ int p = 0; for (int i = 0; str[i]; i ++ ) { ...
数据结构一
单链表1234567891011121314151617181920212223242526272829// head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点int head, e[N], ne[N], idx;// 初始化void init(){ head = -1; idx = 0;}// 在链表头插入一个数avoid insert(int a){ e[idx] = a, ne[idx] = head, head = idx ++ ;}//将数a插入到下标是k的点后面void add(int k,int a){ e[idx]=a; ne[idx]=ne[k]; ne[k]=idx++; }// 将头结点删除,需要保证头结点存在void remove(){ head = ne[head];}
双链表12345678910111213141516171819202122232425// e[]表示节点的值,l[ ...
一周入门微信小程序开发(第五天)
使用npm包小程序对npm包的支持与限制目前,小程序中已经支持使用npm按照第三方包,从而提高小程序的开发效率。但是,在小程序中使用npm包有如下3个限制:
不支持依赖于Node.js内置库的包
不支持依赖于浏览器内置对象的包
不支持依赖于C++插件的包
注意:虽然npm上的包有千千万,但是能供小程序使用的包却为数不多
Vant Weapp什么是VantWeappVant Weapp是有赞前端团队开源的的一套小程序UI组件库,助力开发者快速搭建小程序应用,它所使用的是MIT开源许可协议,对商业使用比较友好。
官方文档:介绍 - Vant Weapp (youzan.github.io)
安装Vant组件库在小程序项目中,安装Vant组件库主要分为如下几步:
通过npm安装
修改app.json
修改project.config.json
构建npm包
修改app.json
详细操作步骤可参考官方文档:快速上手 - Vant Weapp (youzan.github.io)
使用 Vant 组件安装完 Vant 组件库之后,可以在 app.json 的 usingComponen ...
一周入门微信小程序开发(第四天)
自定义组件组件的创建与引用创建组件
在项目的根目录中,鼠标右键,创建 components -> test 文件夹
在新建的 components -> test 文件夹上,鼠标右键,点击“新建 Component”
键入组件的名称之后回车,会自动生成组件对应的 4 个文件,后缀名分别为 .js,.json, .wxml 和 .wxss
注意:为了保证目录结构的清晰,建议把不同的组件,存放到单独目录中,例如:
引用组件组件的引用方式分为“局部引用”和“全局引用”,顾名思义:
局部引用:组件只能在当前被引用的页面内使用
全局引用:组件可以在每个小程序页面中使用
局部引用组件在页面的 .json 配置文件中引用组件的方式,叫做“局部引用”。示例代码如下:
123456//在.json文件中配置{ "usingComponents": { "my-test1":"/components/test/test" }}
123456<!-- 在.wxml文件中 ...
一周入门微信小程序开发(第三天)
页面导航简介什么是页面导航页面导航指的是页面之间的相互跳转。例如,浏览器中实现页面导航的方式有如下两种:
<a>链接
location.href
小程序中实现页面导航的两种方式
声明式导航
在页面上声明一个<navigator>导航组件
通过点击 <navigator>组件实现页面跳转
编程式导航
调用小程序的导航 API,实现页面的跳转
声明式导航导航到 tabBar 页面tabBar 页面指的是被配置为 tabBar 的页面。在使用<navigator> 组件跳转到指定的 tabBar 页面时,需要指定 url 属性和 open-type 属性,其中:
url 表示要跳转的页面的地址,必须以 / 开头
open-type 表示跳转的方式,必须为 switchTab
示例代码如下:
1<navigator url='/pages/message/message' open-type="switchTab">导航到tabBar页面</navigator&g ...
