发表于: 2019-10-30 19:32:14

1 960


今天完成的事:
1、完成shell脚本小课堂PPT的编写,并结束小课堂。
复习了解了脚本权限的相关知识,shell和shell脚本的区别,查看了Shell的基础知识。
(1)脚本权限都有哪些?
Unix和linux的各种操作系统下,每个文件都按读、写、运行设定权限,而权限的持有人分为user用户、group同组用户、others其他用户。
权限用数字表示,其中r=4,w=2,x=1。所以777就是最高权限,表示所有人都有读、写、运行权限,其它权限根据相应要求可自行设置。
比如“-rw-r--r--”,就是644,从第二个字符起,“rw-”即用户有读、写权限,但没有运行权,“r--”表示同组用户只有读权限,没有写、运行权限,其他用户和同组权限相同。
(2)shell是一个用C语言编写的程序,它是用户使用linux的桥梁。它提供了一个界面,用户通过这个界面访问操作系统内核的服务。
简单的理解,shell就是一个命令行解释器,作用是按照一定语法将输入的命令加以解释传给系统,而shell脚本是一种为shell编写的脚本程序,可以说是用来输入命令的,只不过相比传统的一个一个命令输入,脚本是将一部分命令按顺序排列,一次性输入给shell去解释。
(3)shell脚本的基础知识。
① shell变量。
定义变量时,变量名和等号之间不能有空格,并且命名需符合规范。
命名只能使用英文字母、数字、下划线,首个字符不能以数字开头。
命名中间不能有空格,可以使用下划线。
命名不能使用标点符号,不能用bash里的关键字,可用help命令查看保留关键字。
使用定义过的变量需要在变量名前面加“$”符号即可,使用时推荐在变量名外加上花括号,不加也可以,但是为规范代码,易于识别,还是建议加上花括号。

② shell字符串。
字符串可以使用单引号或者双引号,但是在单引号中的字符串里的变量是无效的,会按照原样输出。且单引号字符串中不能出现单独一个的单引号,只能使用成对的单引号,作为字符串拼接使用。
使用双引号则可以有变量,并且双引号里可以出现转义字符。
③ shell运算符。
需要注意的是表达式和运算符之间要有空格,并且完整的表达式要被反引号 ` 包含,而不是单引号。
反引号是在esc建下边,之前还真没注意过。。

④ 另外还有常用的就是echo,用于字符串的输出,#,是注解的标志。
其他并未涉及的部分没有深入研究,后续有需要再学习。
2、提交小课堂PPT代码。
我是先将公共GitHub仓库里的代码pull下来,而后添加我的小课堂PPT代码,并修改index的目录,再提交到我的账号内fork的仓库里,而后在GitHub上请求与公共账号合并分支。
将代码提交到我的GitHub上时,显示remote origin已存在,因为之前是与公共GitHub仓库建立联系pull代码来着,所以直接“git remote rm origin”删除该远程仓库的连接,再“remote add origin”添加自己的远程仓库,即可顺利提交。

3、查看昨天controller中调用util类中的递归查询留言的回复问题。
如下所示,controller中调用util类中的递归查询回复方法时,在入参处传递了MessageService类,对应的util类中的递归查询方法入参处也有该类,而后就可以调用service层的查询方法。这里感到疑惑,因为之前入参处传递的都是基础类型或者是实体类,没有传递过service类。


首先查看了方法的基础知识,将service类中方法当做普通的非静态方法,在不同类的情况下,util的静态方法中想要调用service的方法,需要通过对象才能调用,这里就需要new出一个对象,然而在new出对象后,也无法调用service方法,会报空指针异常。
百度后得知,service不是想new就能new的,因为通过new实例化的对象脱离了spring容器的管理,得不到注解的属性值,所以是null,但是就算添加了@Component注解加入spring容器管理也一样是null。如果想要使用注入bean的方式实现普通类调用service层的方法,就需要按照如下方法。

(1)在相应类上加上@Component注解,将类实例化到spring容器中,相当于xml中的<bean id = "" class = "" />方式。
(2)使用@Autowired注解注入service的bean。
(3)在类中加上 init()函数,函数上要加上@PostConstruct注解,这个注解是servlet中的一个生命周期环节,被修饰的方法会在构造函数之后被执行。
照着方法来倒是成功了,但是原理并不清楚。。@PostConstruct注解又涉及生命周期,看的头昏脑涨。。百度也没找到详细解释的,最多也就是上面的步骤说明。。

成功返回json数据。

但是目前这种方法和在方法入参中添加service类的效果是一样的啊,而且还比较复杂。

然而在方法入参添加service类,而后就可以在util类中调用service方法的原理,根本没法搜索,出来的东西都没有相关的,只能搜索下方法入参类型。


方法入参类型分为基本类型和引用类型(类、接口、数组)。
参数是基本类型,则传递的就是变量的值。
如果参数是引用类型,传递的也是值,但是这个值是对象的引用,也就是对象在内存中的地址。而传递过来的引用指向的这个地址和参数原有引用的指向地址是同一个内存地址。
迷迷糊糊的,大概就是说入参里加的service类变量,和传递到被调用方法的变量是指向同一个内存地址,所以就是一样的,就能够调用service中的方法,而不需要new,不需要注入bean。大概是这个意思吧。。
明天计划的事:
1、学习图片上传相关知识。
2、实现nginx的动静分离。
3、实现任务三的其余接口功能。
遇到的问题:
1、controller方法入参添加service类,而后就可以在util类中调用service方法的原理还是很迷糊,但是不影响使用,先放着吧。。
收获:
1、复习了解了脚本权限的相关知识,shell和shell脚本的区别,查看了Shell的基础知识。
2、了解了使用注入bean的方式实现普通类调用service层方法的方式,也可以直接在方法入参添加service类变量,直接调用,更加方便。
3、对于方法入参类型及其传递有个大概的了解。

返回列表 返回列表
评论

    分享到