杂....

jdk

jdk1.8 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
编写 Java 程序必须使用 JDK,它提供了编译和运行 Java 程序的环境。是整个java开发的核心。
开发java程序最小的环境为JDK,所以JDK是JAVA语言的核心
运行java程序最小的环境为JRE
JVM(JAVA虚拟机)将JAVA代码转换为对应的操作系统可以理解的指令,不同的操作系统有不同虚拟机与之对应,
同一段代码交给虚拟机之后,虚拟机再转化给操作系统

maven

maven 管理jar包
spring boot(全家桶) maven的延伸 默认端口号:8080(是Tomcat的) 更好的管理项目
(Oracle数据库端口号也是8080 需要把 此电脑-服务 OracleXETNSListener关闭)
Tomcat 配置太多 springboot做的优化(springboot整合了Tomcat) 代码想被浏览器访问必须在Tomcat中发布
服务器中间件 只要在这里发布过的项目 都可以被浏览器访问

restful方式 


为了简化get请求的写法
@RequestMapping(insert)
http://localhost:8080/car/insert?id=1&name=张三&age=18
public String add( Integer id,String name,Integer age){
return id+name+age
}
@RequestMapping(insert/{x}/{y}/{z})springmvc提供的
http://localhost:8080/car/insert/1/张三/18
public String add(@PathVariable int x,@PathVariable int y,@PathVariable int z){
}

热部署 应用在运行的时候升级软件 却不需要重新启动应用 
不重启服务器的前提下 识别更新的代码

 Lombok


Lombok 简化了Model层的代码的编写.
以前pojo类/实体类
提供的 @Data注解 自动提供get set tostring hashCode equals
@NoArgsConstructor 提供无参构造
为什么需要添加无参构造
利用反射机制实例化对象时,默认调用无参构造
@AllArgsConstructor 提供有参构造
@Accessors(chain = true)链式加载 可以连点

 public class User implements Serializable {
    private Integer id;
    private String name;

    //链式加载的底层原理 返回User对象
   /* public User setId(Integer id){
        this.id = id;
        return this;    //代表当前对象!!!!!
    }

 lombok使用需要提前安装lombok插件!!, 如果项目发布在Linux系统中.问: 系统是否需要提前安装插件?
不要 因为lombok插件在编译期有效!!!
xxx.java文件编译为xxx.class文件.
知识衍生: 写的是java源码, 运行的是编译后的.class

页面提交的日期都是String类型的 需要把自己变成Data类型 否则404
@DataTimeFormat(pattern=“yyyy-MM-dd”)
private Date intime;
单元测试 必须有 @Test public void 没有参数
向下造型 专门用子类的资源
Hello h = (Hello) o;
h.hi();

Di 依赖注入 @Autowired
对象间的依赖关系
创建对象的过程中Spring可以依据对象的关系 自动把其他对象注入
无需创建对象 直接拿来使用

 

打印所有的启动项
yml文件中 debug: true

classpath*:*.xml yml文件里导入映射文件 根目录情况


注解

spring提供的注解
@Controller 类上注解
MVC
@RestController(常用) = @Controller+@ResponseBody(以前使用的) 接受客户端的请求
@RequestMapping("") 规定浏览器访问类 方法的方式 
@PathVariable 获取请求路径中的参数值 通过{???}获取路径中传递来的值
@CrossOrigin 跨域
@Configuration
@Bean  被spring管理的对象就是bean 将方法的返回值对象交给Spring管理
有特殊业务需求 使用@Bean
这两个注解必须一块使用
@Mapper 将该接口交给Spring管理 spring创建对象
一般标识接口中 如果有多个接口 则应该标识多少
可以采用@MapperScan(“包路径”) 加在启动项上

 @Value注解

 有时需要动态的获取数据,不能直接写死在代码中
为成员变量赋值的时候用

 编辑YML文件
语法说明
## 语法1: 数据结构  key-value结构
## 语法2: 写法     key:(空格)value
## 语法3: yml文件  默认字符集是UTF-8编码 中文不乱码
## 语法4: yml文件  有层级效果  注意缩进
server:
  port: 8080

# SpringBoot启动时 默认加载yml文件
msg:
  hello: "今天下雨,记得带伞~~"

 编辑HelloController
@RestController  //将该类交给Spring管理
public class HelloController {

    /**
     * 规则:
     *    1. 当Spring容器启动时,会加载YML配置文件.
     *       会将内部的key-value结构 加载到spring维护的内存空间中
     *    2. @Value功能,从spring容器中根据key 动态赋值
     *    3. springel表达式 简称:spel
     *
     * 使用场景:
     *      如果代码中需要给成员变量赋值时,一般采用动态赋值的方式.
     */
    @Value("${msg.hello}")
    private String msg;


    @RequestMapping("/hello")
    public String hello(){

        return msg;
    }
}

 
关于主启动类说明

 任何注解都会被元注解修饰
关于元注解的说明
@Target(ElementType.TYPE) 该注解对类有效
@Retention(RetentionPolicy.RUNTIME) 该注解在运行期有效
@Documented 生成源码时 是否动态生成注释文档
@Inherited 标识注解是否可以被继承

@ComponentScan说明 

 说明: 当springBoot启动时,会实例化很多的对象,但是需要排除特定的类型
原因: SpringBoot内部兼容了很多的第三方框架
但是其中个别加入之后会影响整个代码流程,所以通过这样的方式将个别的类排除在外 

 @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

@SpringBootConfiguration注解说明 

配置文件/配置类 作用:整合第三方框架(配置)

@Configuration: 

 该注解一般标识类文件,告知springBoot程序 这个类是用来整合第三方框架/配置的  


@SpringBootConfiguration 

 修饰主启动类,说明主启动类也是一个配置类 

SpringBoot主启动类会扫描用户自己的配置类,并且实例化对象 

  

@EnableAutoConfiguration注解说明 

 自动化的配置 

@AutoConfigurationPackage说明 

 该注解表示自动配置的包扫描的路径.
工作原理: 该注解会动态的获取主启动类当前的包路径.之后开启包扫描的机制
以后写代码都应该在主启动类的同包及子包中

@Import(AutoConfigurationImportSelector.class) 

SpringBoot使用体现了"开箱即用"的思想,用户引入jar包之后 可以直接使用(少量配置).
dependencies代表程序的依赖项,(将其他的包加载到自己的项目中), 只是加载不负责执行 

流程 

当SpringBoot主启动项执行时,内部会加载@Import(AutoConfigurationImportSelector.class),
该注解的作用就是根据依赖信息,根据SpringBoot内部的配置信息,依次加载执行.
当匹配了用户添加的启动器之后,程序负责实例化框架(执行jar包中的内容).
如果匹配不到,则继续向下执行.最终SpringBoot程序加载成功
用户暂时不需要数据库的配置. 问:能否先行添加数据源的启动项?? (不添加任何注解!!!)
 不可以,因为启动项执行需要完整配置,数据源信息并未添加.导致报错.
SpringBoot项目中的依赖包尤其启动项,添加时慎重. 如果需要添加启动器,则必须保证配置完整.否则程序启动必然失败

报错 

304 数据已缓存
400 参数类型不匹配(如 url请求的参数和后端的参数类型不同)
404 访问的资源不存在 找正确的路径
500 内部服务器出错 java代码出异常 访问网址加参数 跟前端没关系 看后端
基本参数类型 当访问url时 没传参 报异常
引用类型 即使没传参 返回null
504 访问超时

端口号 

一般使用的端口号 0-65535
Oracle数据库 8080
spring boot 默认端口号:8080(是Tomcat的)
mysql的默认端口是3306
sqlserver默认端口号为:1433;
oracle默认端口号为:1521;
DB2默认端口号为:5000;
PostgreSQL默认端口号为:5432
http协议 默认端口号是80
https协议 默认端口号是443
8000是客户端端口号的

SpringBoot 

 有时由于业务需要,需要进行单元测试, 单元测试中的对象可能会依赖Spring容器.
定制化属性内容 具体业务功能. 利用配置类实现

//作用: 将自己需要的对象交给Spring容器管理
@Configuration  //标识这是一个配置类
public class UserConfig {

    /**
     * 知识点:1.Spring内部维护一个Map集合
     *       2. Map集合 key/value 分别是谁???
     *       3.IOC管理的对象的方式   1.@Controller等注解 2.@bean
     *  
     * 1.注解组合:  @Configuration +  @Bean
     * 2.什么是bean: 被spring管理的对象就是bean
     * 3.@Bean注解的作用
     *      将方法的返回值对象交给Spring管理
     * 4.Spring如何管理对象?
     *   数据结构: Map集合   Map<K,V>
     *   key:   对象的ID
     *   value: 实例化之后的对象
     * demo1: Spring如何管理对象
     *      key: 方法的名称
     *      value: 方法的返回值   Map<user,new User()>
     *
     * demo2:
     *      @Controller
     *      HelloController{}
     *      key: helloController   首字母小写
     *      value: spring通过反射创建的HelloController对象
     * @return
     */
    @Bean
    public User user(){

        return new User(101,"好好学习");
    }
}

package com.jt.test;

import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * 原理说明:
 *  1.当测试类执行时,会根据SpringBoot的配置,动态启动Spring容器.
 *  2.当spring容器启动时,会加载所有的注解和配置类,最终将所有的对象
 *  交给Spring容器管理  Map集合
 *  3.@SpringBootTest 通过这个注解,可以动态的从spring容器中
 *  获取对象
 *
 */
@SpringBootTest
public class TestSpring {

    /**
     * 注入方式:
     *      1. 根据类型注入 (默认规则)
     *      2. 根据名称注入   @Autowired
     *                      @Qualifier("user")
     */
    @Autowired
    //@Qualifier(value="user")
    private User user;

    @Test
    public void testUser(){
        System.out.println(user.toString());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值