JAVA底子语法与Spring笔记

源代码 2024-9-22 03:34:34 89 0 来自 中国
小马近来在实验一个spring项目源码翻译为PHP的使命。以是复盘了下JAVA知识,做下笔记并分享。笔记现在还比力乱但根本涵盖了紧张知识点,入门腾飞。
JAVA底子语法

JAVA参考教程文档(这里)。
是表明型的语言(.java文件  javac->.class文件   表明器->JVM假造机),GO是编译型的,PHP是表明型的。
JAVA变量有摆列范例,PHP8  才开始支持摆列范例。
重载(形参必须差别,方法名称可以一样)与重写(可稳定,内部焦点变) --- 多态性。多态存在的三个须要条件:继续,重写,父类引用指向子类对象:Parent p = new Child();
PHP是没有重载的,不能有同名函数。
多态的优点:
1. 消除范例之间的耦合关系
2. 可更换性
3. 可扩充性
4. 接口性
5. 机动性
6. 简化性
当利用多态方式调用方法时,首先查抄父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的利益:可以使步伐有精良的扩展,并可以对全部类的对象举行通用处理。
JAVA的字符串是 类对象,这和PHP和GO是不一样的,PHP 字符串可以直接加号拼接,JAVA可以借助对象内函数来处理字符串拼接等操作(也可以直接加号拼)。
小马明确,JAVA的package名有点雷同  GO的包,PHP的定名空间。
JAVA数据布局
Java 集合框架(https://m.runoob.com/java/java-collections.html)
集合框架是一个用来代表和利用集合的同一架构。全部的集合框架都包罗如下内容:
接口:是代表集合的抽象数据范例。比方 Collection、List、Set、Map 等。之以是界说多个接口,是为了以差别的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复利用的数据布局,比方:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法实验的一些有用的盘算,比方:搜刮和排序。这些算法被称为多态,那是由于雷同的方法可以在相似的接口上有着差别的实现。
集合框架体系如图所示(找一下图好明确)。
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
// 创建集合
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Zhihu");
        // 获取迭代器
        Iterator<String> it = sites.iterator();
        // 输出集合中的第一个元素
        System.out.println(it.next());


Java Object 类是全部类的父类,也就是说 Java 的全部类都继续了 Object,子类可以利用 Object 的全部方法。
泛型,泛型类(泛型类的声明和非泛型类的声明雷同,除了在类名反面添加了范例参数声明部门)。
 --- 这里与UML的泛化 是两种概念,泛化有继续的意思。
泛型类例子:
public class Box<T> {
  private T t;
  public void add(T t) {
    this.t = t;
  }
  public T get() {
    return t;
  }
  public static void main(String[] args) {
    Box<Integer> integerBox = new Box<Integer>();
    Box<String> stringBox = new Box<String>();
    integerBox.add(new Integer(10));
    stringBox.add(new String("菜鸟教程"));
    System.out.printf("整型值为 :%d\n\n", integerBox.get());
    System.out.printf("字符串为 :%s\n", stringBox.get());
  }
}
GO和PHP的泛型话题:Golang团队以为在范例体系和运行时的复杂性耗费太大,还没找到可以和这个复杂性相抵的精良操持。内置的map和slice实在都有泛型的味道,加上可以用interface{}来构造容器,可以到达泛型的结果。以是现在为止还没有直接的支持泛型。至于PHP,现在还没须要支持泛型。
JAVA范例通配符
1、范例通配符一样平常是利用 ? 代替具体的范例参数。比方 List<?> 在逻辑上是 List<String>,List<Integer> 等全部 List<具体范例实参> 的父类。
2、范例通配符上限通过形如List来界说,云云界说就是通配符泛型值继承Number及其下层子类范例。
3、范例通配符下限通过形如 List<? super Number> 来界说,表现范例只能继承 Number 及其上层父类范例,如 Object 范例的实例。
对象的序列化和反序列化
类 ObjectInputStream 和 ObjectOutputStream 是高层次的数据流,它们包罗反序列化和序列化对象的方法。
请注意,一个类的对象要想序列化乐成,必须满意两个条件:该类必须实现 java.io.Serializable 接口。该类的全部属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的。如果你想知道一个 Java 尺度类是否是可序列化的,请检察该类的文档。查验一个类的实例是否能序列化非常简朴, 只必要检察该类有没有实现 java.io.Serializable接口。
Java 网络编程
java.net 包中提供了两种常见的网络协议的支持:TCP  UDP
Socket 编程
套接字利用TCP提供了两台盘算机之间的通信机制。 客户端步伐创建一个套接字,并实验毗连服务器的套接字。
当毗连创建时,服务器会创建一个 Socket 对象。客户端和服务器如今可以通过对 Socket 对象的写入和读取来举行通信。
java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器步伐提供了一种来监听客户端,并与他们创建毗连的机制。
socket是一样平常的app用的(服务端之间的通信?),客户端是任何的socket client, websocket 是web上用,客户端一样平常是欣赏器上的js或其他web客户端 SDK  ?
Applet 是一种 Java 步伐。它一样平常运行在支持 Java 的 Web 欣赏器内。由于它有完备的 Java API 支持,以是 Applet 是一个全功能的 Java 应用步伐。
<applet> 标签是在HTML文件中嵌入 Applet 的底子。
<applet code="HelloWorldApplet.class" width="320" height="120">
很多多少java实例demo(这里)。
Java 8 新特性
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个紧张版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。
Java 9 新特性
注解的明确
JAVA注解是 jdk 5新特性,注解(也被称为元数据)为我们在代码中添加信息提供了一种情势化的方式。拥有如下上风:简朴易读的代码,编译器范例查抄,利用 annotation API 为本身的注解构造处理工具。纵然 Java 界说了一些范例的元数据,但是一样平常来说注解范例的添加和怎样利用完全取决于你。
注解根本语法
注解的语法非常简朴,紧张是在现有语法中添加 @ 符号。比如常用的:
@Override:查抄该方法是否是重写方法。如果发现其父类,大概是引用的接口中并没有该方法时,会报编译错误。
@Deprecated:标记过时方法。如果利用该方法,会报编译告诫。
@SuppressWarnings:每当创建涉及重复工作的类或接口时,你通常可以利用注解来自动化和简化流程。
在这个例子中,注解可以和任何修饰符共同用于方法,诸如 public、static 或 void。从语法的角度上看,注解的利用方式和修饰符的利用方式划一。
自界说注解:
注意啊,interface前边有个@,@interface 这是自界说注解,不是接口。
public @interface Student{
        String name();    //属性没有默认值,利用时必须指定值。
        int age() default 0 ;  //有默认值,利用时,可以不给,也可以给。
        String[] hobbies();  //数组格式,按照数组格式赋值,只有一个时,可以省略大括号。
}
//这样利用。
@Student(name="小老犇",hobbies={"放牛","吃草"})
public void abc(){
        sout("注解利用");
}
注解中属性的数据范例一共有三种:
八种根本数据范例(byte short int long float double boolean char)
Class, String, 摆列, 注解
以上全部范例的范例数组。
元注解
【用于界说注解】的注解,通常用于注解的界说上:
@Target:目标,形貌自界说注解的利用范围,比如:类、接口、摆列、方法等等。  ---- 自界说一个注解范例(有字典列表),然后用来约束查抄被 自界说注解注解的 元素:
我们界说了一个实用于类的注解,代码如下所示:
@Target({ElementType.TYPE})
public @interface AnnotationTest {//注意啊,interface前边有个@,这是自界说注解,不是接口。
}
@AnnotationTest
public class Test {
    //@AnnotationTest   Erro:'@AnnotationTest' not applicable to method
    public void method(){
    }
}
@Retention:生存,表现注解信息生存的时长。
值        分析
SOURCE        注解将被编译器抛弃(该范例的注解信息只会生存在源码里,源码颠末编译后,注解信息会被抛弃,不会生存在编译好的class文件里)
CLASS        注解在class文件中可用,但会被VM抛弃(该范例的注解信息会生存在源码里和class文件里,在实验的时间,不会加载到假造机中),请注意,当注解未界说Retention值时,默认值是CLASS,如Java内置注解,@Override、@Deprecated、@SuppressWarnning等
RUNTIME        VM 将在运行期也生存注解,因此可以通过反射机制读取注解的信息。
@Documented:天生的JavaDoc文档。
@Inherited:答应子类继续父类的注解,一样平常情况下获取不到父类注解。
@Repeatable:答应一个注解可以被利用一次大概多次(Java 8)。
不包罗任何元素的注解称为标记注解(marker annotation),比方上例中的 @AnnotationTest 就是标记注解。
注解元素
注解元素可用的范例如下所示:
全部根本范例(int、float、boolean等)
String
Class
enum
Annotation
以上范例的数组
不答应利用任何包装范例,但是由于自动装箱的存在,这不算是什么限制。注解也可以作为元素的范例。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface AnnotationTest {
    int id();
    String value() default "value";
    double[] number();
}
public class Test {
    @AnnotationTest(id=1,value = "123",number = {1,2,3})
    public void method(){
    }
    @AnnotationTest(id=1,number = {1,2,3})
    public void method2(){
    }
}
编译器会举行范例查抄,如果在注解某个方法时没有给出指定值时,会编译错误;利用default 关键字,则该注解的处理器会利用此元素的默认值。
利用反射操作注解
方法        分析
getAnnotations()        获取元素上全部的注解
getDeclaredAnnotations()        获取元素上全部的注解,不包罗从父类(inherited)继续
getAnnotation()        获取元素上指定注解
getDeclaredAnnotation()        获取元素上指定注解,不包罗从父类(inherited)继续
isAnnotationPresent()        指定范例的注解存在于此元素上,则返回 true,否则返回 false。
注解不支持继续
Spring

笔者要提示的是,万万不要把Spring和Spring Framework搞混淆了,很多文章都错误的界说了spring:spring是一个一站式的轻量级的java开发框架,焦点是控制反转(IoC)和面向切面(AOP),针对于开发的WEB层(springMVC)、业务层(IoC)、恒久层(jdbcTemplate)等都提供了多种设置解决方案。这是Spring Framework的界说,至于Spring,是整个生态。
Spring framework
即Spring,是其他Spring百口桶的底子和焦点:包罗SpringMVC(业务开发)、SpringBoot(在MVC底子上简化了XML设置,自动装配)、SpringCloud(一整套基于Spring Boot的微服务解决方案)、SpringData、SpringSecurity。
Spring由Rod Johnson创建,2004年发布了Spring框架的第一版,其目标是用户简化企业级开发的难度和周期。
以是,我们学习的时间不要避重就轻,应该以Spring Framework和Spring Boot为主,而不是Spring Cloud。
spring文档:https://www.w3cschool.cn/wkspring/dcu91icn.html
spring视频教程:https://www.imooc.com/video/3662
IOC
接口A a = new 接口A实现类A1()
a.echoA1name();
接口cache
cache   = new redis()
XML或注解方式  (实现IOC  bean对象容器)
一个beanid  一个对象
xml  <bean id=''   设置对应具体的类class="接口实现类"></bean>
.java 载入xml文件,然后   某接口A  a =super.getBean('bean_id')
a.hello();//接口函数(得到接口实现类中的具体实现)
初始化bean容器
spring注入(bean对象相互注入):设值注入,构造注入  (设置xml文件bean完成实现)(https://www.imooc.com/video/3668)。   ----- 写完代码后(含注入代码),然后依靠还必要通过 设置XML  bean来实现注入后的终极对象
bean设置项
bean作用域:  单例,每次哀求新建,每个http哀求有用(像session),session(每个session内有用),global session
Spring 基于注解的设置
序号        注解 & 形貌
1        @Required
@Required 注解应用于 bean 属性的 setter 方法。   -----必须要在xml设置文件界说属性
2        @Autowired
@Autowired 注解可以应用到 bean 属性的 setter 方法,非 setter 方法,构造函数和属性。---- 自动装载(自定实例化 注入对象,不消在xml设置注入)
3        @Qualifier
通过指定确切的将被连线的 bean,@Autowired 和 @Qualifier 注解可以用来删除杂乱。
4        JSR-250 Annotations
Spring 支持 JSR-250 的底子的注解,此中包罗了 @Resource,@PostConstruct 和 @PreDestroy 注解。
AOP:面向切面编程  (实用于功能是垂直的)。实现方式:预编译  aspectJ  和 运行期动态署理spring-aop 。(https://www.w3cschool.cn/wkspring/izae1h9w.html)(https://www.jianshu.com/p/38e2ba053ed7)
日志,事件,安全控制
thinkphp AOP(面向切面编程)钩子和举动
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态署理实现步伐功能的同一维护的一种技能。AOP是OOP的连续,是软件开发中的一个热门,也是Spring框架中的一个紧张内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部门举行隔离,从而使得业务逻辑各部门之间的耦合度低落,进步步伐的可重用性,同时进步了开发的服从。
AOP大概意思指:在步伐必要扩展时,不应动原来的代码
在thinkphp中实现雷同java的AOP可以利用“举动”。
首先必要知道“切面”,在thinkphp 中称为标签位(钩子,举动)。即在代码的某个位子参加一个标签,这个标签代表实验一个或多个操作,thinkphp也提供了几个标签.
参:  https://www.kancloud.cn/manual/thinkphp5_1/354129
参:  https://www.kancloud.cn/manual/thinkphp5/118130
springBoot


springBoot视频教程
视频教程2
spring的bean容器相干的注解有:@Required, @Autowired, @PostConstruct, @PreDestory。尚有Spring3.0开始支持的JSR-330尺度javax.inject.*中的注解(@Inject, @Named, @Qualifier, @Provider, @Scope, @Singleton).
springmvc相干的注解有:@Controller,@RequestMapping,@RequestParam, @ResponseBody等等。
原文
@PostMapping("login")
@PostMapping
用于将POST哀求映射到控制器处理方法上。具体来说,@PostMapping是一个作为快捷方式的组合注解等价于@RequestMapping(method = RequestMethod.POST)。
Spring拦截器的实现以及通过注解实现拦截
@Log("登录")    每个方法前面加注解,通过注解类实现拦截器。(Log类被界说为注解public @interface Log ,在具体某业务函数上加上注解代表该函数必要实验注解的拦截@Log("登录") ,Log类(实在是一个拦截器实现)实现拦截器接口class Log implements HandlerInterceptor这样即可实如今恣意函数前加注解就可以日志写入) 
2.png
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 00:19, Processed in 0.158199 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表