Controller 中的请求方法,通常我们都是 public 的,如果是 private 的、protected 的行不行,为什么?...后来一个同事比较认真,第二天早上测试后发现报错了,给我反馈说 private 方法的内部注入的 service 为 null,修改成 public 后就不会为 null。为什么会产生这个问题呢?...会不会是切点注解中的修饰符匹配不到呢?将切点中的修饰符从 public 修改成 private。...其本质是:调用某个类的方法时,实际上是先为该类生成一个子类,然后再在子类中通过反射等,达到方法拦截的目的。...对于子类,其父类中,private修饰的方法,子类如果与父类不在同一包下,是没有访问的权限的,此场景下,cglib 生成的子类,不会和父类在同一包下,也就是private修饰的方法,不能进行动态代理,所以会报空指针异常
(包中有包),这个在前面的第三种打包方式已经讲过了,在使用第三种方式时的好处是:程序员可以在同一个文件中,将类(class/object)、trait 创建在不同的包中,这样就非常灵活了。...在底层这个包对象会生成两个.class文件 package.class 和 package$.class。 7.1.9 包对象的注意事项 1、每个包都可以有一个包对象。你需要在父包中定义它。...当调用对象方法的时候,该方法会和该对象的内存地址绑定。 // 2. 当调用对象属性时,没有动态绑定机制,哪里声明,那里使用。 ...但是有一种情况:当动态实现抽象类的所有抽象方法时,抽象类也就被实例化了。本质是该抽象类的匿名子类实现了该抽象类。 ...,将 Java 哈希映射(Java 中的 HashMap)中的所有元素拷贝到 Scala 哈希映射(Scala 中的 HashMap)。
三、面向对象三大特性 封装 继承 多态 ---- Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的,但是对应的语法有所不同。...一、Scala中的包管理 基本语法 package + 包名 包管理的作用 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 ---- 包的命名 命名规则:只能包含数字、字母、下划线、小圆点...: 一个源文件中可以声明多个 package 子包中的类可以直接访问父包中的内容,而无需导包 包对象 定义包对象: package object 包名{ // 代码块 } Scala 中可以为每个包定义一个同名的包对象...一个.java文件 有一个 public 类。 Scala中没有 public关键字,默认就是公共的,一个.scala 中可以写多个类。声明类时不能加public,会报错。类名不要求和文件名一致。...Scala 中的属性和方法都是动态绑定的。 Scala中属性也可以被重写,使用override关键字。
Scala包 基本语法: package 包名 Scala包的三大作用(和Java一样) 1.区分相同名字的类 2.当类很多时,可以很好的管理类 3.控制访问范围 包的命名 命名规则 只能包含数字...便于管理 便于区分同名包 java中包的用法 导包 语法: import 包.*/ import 包.类名 位置: 必须处于java源文件中,声明包(package)之后,类(class)...之前 声明包 scala中包的用法 导包 位置:可以导入到任何位置中 声明包下: import java.util._ object Demo07 {} object中: object Demo07...包对象中,定义的非private属性与方法在当前包下,任何位置都可以访问。 包与权限 语法: private [包名] 代表修饰的属性或方法,只能在指定包中使用。...} 类型自定推断;当对属性名设置了默认值时,可以不用指定属性对应的类型,可以自动推断出该属性的类型 class Person{ private var name="张三" val age=18
三,导入包package Scala有以下一些常见的导入package的方式 1,引入全部对象 (import scala.io._) 2,引入某个对象 (import scala.io.StdIn)...函数的值是函数的参数和返回值的取值映射关系, 如 x => x+1 x,y => x+y 。 使用这种方式声明的函数叫做匿名函数。 此外,当函数表达式中引用了非参数的变量时,这种函数叫做闭包。...Scala的Array和容器中的各种数据结构内置有非常丰富的高阶函数。 ? ?...Scala有3中定义类的风格,java风格,简写风格,和case类风格。 简写风格可以在类声明的参数前加上val即表示为类的属性,省去属性的绑定。...如果某个类定义时被abstract声明为抽象类时,它可以被继承但是不能直接被实例化。 和Python语言不同,Scala每个类只能继承一个超类。
5)Scala中的类的成员默认的访问权限是public。也可以加private或protected。 6)当成员变量或成员方法是私有属性时,外部将不能直接访问,这个同java一样。...3)一个单例对象可以单独存在,也可以绑定到一个类上。 4)单例对象当中的所有方法,都可以不需要创建对象而直接通过object单例对象的名字直接来调用,用起来感觉就像一个静态方法一样。 ...5)当一个单例对象和某个类写在同一个源文件中且共享同一个名字时,他们就产生了一个绑定的关系。此时单例对象称为该类的伴生对象。类称为该对象的伴生类。 ...2)和java中的接口不同的是,scala中的特质可以包含具有方法体的方法。 ...1)scala中的import可以出现在代码任何地方。 2)scala中的import时可以指的是对象和包。 3)scala中的import可以重命名或隐藏一些被引用的成员。
假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器端一次读取到的字节数是不确定的,所以可能发生四种情况: 1、服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包。 ...3、服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包。 ...4、服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包。 ...那么在Netty中可使用LineBasedFrameDecoder和StringDecoder LineBasedFrameDecoder的工作原理是一次遍历ByteBuf中的可读字节,判断看是否有...就木有粘包或拆包的问题啦~~~~ 机缘巧合,同事也一起实现了Scala版~ clientHandler: 1 package main.nettyscala 2 3 import io.netty.buffer
/受保护可见性,就是你可以更细粒度指定某个类或某个成员在某个作用域(可以是包或类)私有或受保护可见性 成员在类和包中的 private/protected 可见性 该可见性可以有16种组合,下面的例子列举除了这些组合...[C1]指定成员在自身类作用域 private,在该类所在的包内和包外均不可见(9也是这个道理) private[this]比 private[C1]更加严格,前者只对相同实例可见,相同类的不同实例都不可见...;而后者对相同类的不同实例也可见 private[P1]指定在包 P1 内 private,则在 P1 包中的类中均可见,而在 P1外的包均不可见 private[P2]指定在包 P2 内 private...见1 见2 见3 见4 见5 见6 见7 见8 类型在类和包中的 private/protected 可见性 类型的情况就会少一点: package P1 { private[P1] class...子包内及外部包均可见 有包 package 的子包为 package1,对于 private[package1],在 package1 包内、package1 子包及其父包即 package 内可见,
把不同的单词归属到不同的组 // val res3 = res2.groupBy((x:(String, Int)) => x._1) // 简写形式如下 // val res3 = ...将工厂抽象成两层:AbsFactory(抽象工厂) 和 具体实现的工厂子类。 17.9 单例模式 17.9.1 什么是单例模式+单例模式的应用场景 ?...insertCoin 有不同的业务逻辑 // 其它的方法同样存在这样的处理 override def insertCoin(): Unit = { println("please wait...insertCoin 有不同的业务逻辑 override def insertCoin(): Unit = { println("please wait! ...动态代理的应用案例 应用案例说明 有一个婚恋网项目,女友/男友有个人信息、兴趣爱好和总体评分,要求: 1、不能自己给自己评分 2、其它用户可以评分,但是不能设置信息、兴趣爱好。
和java很类似,scala也有自己的可见性规则,不同的是scala只有private和protected关键字,没有public关键字,同时scala还提供了更加细粒度的访问控制如protected[...public scala中默认的访问权限就是public,这意味着在scala中没有可见性关键字的声明体,他的访问权限就是public,是具有公有可见性的。...这与Java不同,Java 语言中默认的“公有”可见性只对包可见(即包内私有)。...scala的范围有this,package和具体的某个类型。 简单点讲范围内的可见性就是在范围内保持该可见性的特性。...scopeB 中访问scopeA 时,或者当我们尝试从嵌套包scopeA2 中访问成员变量时,便会出现错误。
这时这个函数实际是有返回值的,该函数并不是过程。(这点在讲解函数细节的时候讲过的) 2、开发工具的自动代码补全功能,虽然会自动加上 Unit,但是考虑到 Scala 语言的简单,灵活,最好不加。...当函数返回值被声明为 lazy 时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行,这种函数我们称之为惰性函数。...3、类是对象的模板,对象是类的一个个体,对应一个实例。 4、Scala 中类和对象的区别和联系 和 Java 是一样的。 6.1.4 如何定义类 ?...6.4.3 Scala 构造器的介绍+基本语法+快速入门 Scala 构造器的介绍 和 Java 一样,Scala 构造对象也需要调用构造方法,并且可以有任意多个构造方法(即 scala 中构造器也支持重载...Java 与 Scala 在函数层面上的不同体现: // 在 Java 中 函数(接收参数) // 在 Scala 中 集合.函数(函数) 如下图所示: ?
println("包的文件不一定要对应的文件夹下") } } package scala { object test2 {...def execute = { //默认scala包是被载入的 //val a = collection.mutable.ArrayBuffer(...("}") } } 包对象: //由于JVM局限,包不能包含工具函数和常量,利用包对象 package com.hash.learn.scala package object Chapter7...(defaultName) } } } 包可见: package com.hash.learn.scala { package Chapter7 { object wc {...renameAndHide { //将Java中的HashMap重命名,同时导入所有包下类 import java.util.
这个结果跟Java实现的代码类似(生成的getter和 setter跟Java实现有所不同,但在这里不是什么问题),可见,Scala帮我们做了多少简化工作。...; 每个类都可以有伴生对象,伴生类与伴生对象写在同一个文件中; 在伴生类中,可以访问伴生对象的private字段Person.uniqueSkill; 而在伴生对象中,也可以访问伴生类的private方法...这是Trait的一个链式延时绑定特性,那么在现实中,这个特性就表现出极大的灵活性,可以根据需要任意搭配,大大降低代码量。 Scala的面向对象特性,暂先介绍到这里。...Array:数组是可变的同类对象序列; Set:无序不重复集合类型,有可变和不可变实现; Map:键值对的映射,有可变和不可变实现; Tuple:可以包含不同类元素,不可变实现; List:Scala的列表是不可变实现的同类对象序列...我们把cycle函数的两个输入参数进行了拆分(如上述代码第一行),同时在调用cycle函数时,方式也有所不同(如上述代码最后两行)。这是什么意思?
1、当左右两边都是数值型时,则做加法运算。...2、当左右两边有一方为字符串,则做拼接运算。...2.7.3 整型的使用细节 1、Scala 各整数类型有固定的表数范围和字段长度,不受具体操作系统的影响,以保证 Scala 程序的可移植性。 ...2.9.4 字符类型本质探讨 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来 存储:字符 -> 码值 -> 二进制 -> 存储 读取:二进制 -> 码值 -> 字符 -> 读取 字符和码值的对应关系是通过字符编码表决定的...提示:scala.math 找相应的方法。 ? 2、Scala 语言的 sdk 是什么? 答:sdk指的是scala的开发工具包。 3、Scala 环境变量配置及其作用。
them evaluated.Type :help for more information.scala> 1 + 1res0: Int = 2在Scala将代码定义到某个包中有两种方式,第一种方法和..._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。如果想要引入包中的几个成员,可以使用selector(选取器):import java.awt....数值区间为 -32768 到 32767Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647Long64位有符号补码整数。...作用域保护,Scala中,访问修饰符可以通过使用限定词强调。格式为:private[x]或protected[x]这里的x指代某个所属的包、类或单例对象。...如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。
Null 值 Scala 转义字符 Scala 变量 变量声明 总结: 创建测试类: 【day1/demo1.scala】 这里是有包名(后面有讲述)的 通过Package可以创建包名...基本语法 Scala 基本语法需要注意以下几点: 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。...; println(s); } } Scala 包 定义包 Scala 使用 package 关键字定义包,在Scala将代码定义到某个包中有两种方式: 第一种方法和 Java 一样...浮点型字面量 如果浮点数后面有f或者F后缀时,表示这是一个Float类型,否则就是一个Double类型的。 布尔型字面量 布尔型字面量有 true 和 false。 ...基于变量的数据类型,操作系统会进行内存分配并且决定什么将被储存在保留内存中。因此,通过给变量分配不同的数据类型,你可以在这些变量中存储整数,小数或者字母。
Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。...Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。...如果写成private[x],读作"这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private。...这种技巧在横跨了若干包的大型项目中非常有用,它允许你定义一些在你项目的若干子包中可见但对于项目外部的客户却始终不可见的东西。...包里的所有的类和对象可见。
然后这个系列的文章打算探究C++的语言特性,也比较一下不同语言(如Java,Scala,Python,Go)之间的设计哲学,同时也抛砖引玉的希望能有大拿们的指点。...在C++之中,类的友元函数是定义在类外部,但它有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。...接下来我们来分析一下友元函数的特点。 1、为什么要引入友元函数: 在实现类之间数据共享时,减少系统开销,提高效率。具体来说:为了使其他类的成员函数直接访问该类的私有变量。...所以这种类型有时也称为friendly类型,现在知道这个名字的出处了吧,大家对同一个package之中要放哪些类有木有新的认识了呢?...Scala 在Scala之中,private和protected可以指定额外的参数。
领取专属 10元无门槛券
手把手带您无忧上云