• Ctrl + J  生成代码模板

  • boolean flag = true

    使用flag.if  flag.else  可自动生成代码

  • fori  自动生成

  • flag.while  自动生成

  • new String().var  自动生成  其他类型同理

  • “Hello world”.sout  自动生成打印

  • .try  自动生成try catch

  • List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);  list.for  list.fori  list.forr  生成for循环

  • map.entrySet().iterator().var  拿到迭代器

  • iterator.hasNext().while  生成循环

  • 选中后 + ctrl + alt + t  生成try catch等

  • 隐藏侧边栏 alt + 1    隐藏debug/run底边栏 alt + 4

  • 两次shift  查找

  • 构建、运行java项目 参考链接

  • 构建运行springBoot项目 参考链接

  • Tomcat服务器上部署jar,或执行java -jar的区别 参考链接

    简单讲,SpringBoot打包出来的jar包中已经包含嵌入式tomcat服务器的依赖项;

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

当其部署到外部tomcat服务器时,需屏蔽掉内部内嵌的tomcat

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
  • 安装tomcat 参考链接

    D:\apache-tomcat-10.0.11  127.0.0.1:8080

  • idea的project下可有多个module;module下还可以嵌套module

  • SSM: spring + springmvc + mybatis

  • SpringBoot微框架 = spring(工厂)用来管理项目对象,创建项目对象 + springmvc(控制器) controller

    • spring工厂:创建对象

      2种形式:

      1、基于配置文件形式创建对象

      spring.xml

      <bean id=“” class=“xxx.xxServiceImpl” />

      ​ 2、基于注解方式创建对象

      @Component  作用:在工厂中创建对象 通用对象创建注解

      @Controller  创建控制器注解

      @Service  创建业务层注解

      @Repository  创建dao层注解 mybatis

    • springBoot创建对象:

      a.使用原始spring框架中注解创建对象  对象名称默认为类名首字母小写

      @Component

      @Controller

      @Service

      @Repository

      b.使用配置方式创建对象

      @Configuration:修饰范围:用在类上 =====> spring.xml

      作用:代表这个类是一个springBoot配置类

      @Bean注解:作用:创建对象  相当于spring.xml书写bean

注入对象时使用@Autowried,默认通过类型注入,跟对象名无关。若想通过对象名注入,需额外加@Qualifier(value = “demoServiceImpl”)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Configuration
public class BeansConfig {

@Bean
public User user() {
return new User();
}

@Bean
public Emp emp() {
return new Emp();
}
}

//不推荐使用的写法
@Autowired
private EmpDAO empDAO;


//更推荐构造写法
private EmpDAO empDAO;

@Autowired
public EmpServiceImpl(EmpDAO empDAO) {
this.empDAO = empDAO;
}
  • <optional>true</optional>  

  • <scope>test</scope>  生效范围,仅测试时可用

  • resources目录下建包,层级结构用"/“,不要用”."

  • @MapperScan(“com.zk.com”)  //修饰范围:用在类上  作用:用来扫描dao接口所在的包,同时将所有dao接口在工厂中创建对象

  • @Mapper  //修饰范围:只能放在dao接口上  作用:用来在工厂中创建dao对象

  • SpringBoot完成本地测试

    1、引入依赖

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<!-- 生效范围:仅测试时可用 -->
<scope>test</scope>
</dependency>

2、启动SpringBoot应用,才能spring工厂启动,注入测试对象

@SpringBootTest  修饰范围:用在类上  作用:在这个类实例化过程中启动springBoot应用

  • maven下的clean  清空已编译好的.class文件(target文件)

  • 配置热部署

    引入依赖

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>

setting compiler 勾选Build project automatically

ctrl + shift + alt + /  在registry中,勾选 compiler.automake.allow.when.app.running

此时运行项目,main会变为restartedMain  成功开启热部署

  • AOP  切面编程  底层是对动态代理的封装

    springBoot仅提供注解方式的切面编程

    Aspect(切面) = Advice(通知) + 切入点

    步骤:

    1、引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、在springBoot项目中新建config(配置)包

@Configuration  修饰范围:只能用在类上  作用:代表这是一个spring的配置类  spring.xml

@Aspect   修饰范围:只能用在类上  作用:代表这个类是一个切面类  <aop:config>

//@Before  代表这个方法是一个前置附加操作

//@After  代表这个方法是一个后置附加操作

//@Around  代表这个方法是一个环绕附加操作

value属性:用来书写切入点表达式

@Before(“execution(* com.zk.service.*.*(…))”)  注意符号!!

对于@Before和@After,方法内可使用参数JoinPoint,来获取连接点等相关信息  可加可不加

1
2
3
4
5
public void before(JoinPoint joinPoint) {
System.out.println("====before Aspect====");
System.out.println("当前执行目标类:" + joinPoint.getTarget());
System.out.println("当前执行目标类中方法:" + joinPoint.getSignature().getName())
}

对于@Around,参数为ProceedingJoinPoint

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
* 切入点表达式:
* 1、execution 方法级别切入点表达式
* 2、within:类级别切入点表达式:控制越粗,运行效率越高
* 3、基于注解的切入点表达式 @annotation(com.zk.annotation.xxx)
* */
//类似于拦截器
//@Around("execution(* com.zk.service.*.*(..))")
//@Around("within(com.zk.service.*)")
@Around("@annotation(com.zk.annotations.MyAdvice)")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("===========进入环绕的前置操作==============");
System.out.println("当前执行类:" + proceedingJoinPoint.getTarget());
System.out.println("当前执行方法名:" + proceedingJoinPoint.getSignature().getName());
//放行,继续执行目标方法;获取目标方法的返回值Object proceed
Object proceed = proceedingJoinPoint.proceed();
System.out.println("=======执行目标方法后归来,进入环绕的后置操作=========");
return proceed;
}
  • 拦截器interceptor  底层原理为AOP

    相对于拦截器,另一种filter过滤器:可拦截javaweb中请求,放行或中断。可拦截任何资源。

    • 拦截器的定义:类似filter,但只能拦截controller相关请求

    • 作用:将controller中共有代码放入到拦截器中执行,减少controller中代码冗余

    • 拦截器的开发:

      • 类 implements HandlerInterceptor

        preHandler 预先处理方法: 最先执行方法  返回布尔类型  true放行  false中断

        执行controller中的内容

        postHandler 过程中处理: controller返回之后回到postHandler方法执行,执行完成这个方法开始响应浏览器

        afterCompletion 最后完成: 当响应结束之后,执行拦截器的该方法

      • 配置拦截器

        springMvc配置方式:mvc:interceptors springmvc.xml

        springBoot 提供了springmvc配置类:

        类 implements WebMvcConfigurer {

        //覆盖配置拦截器方法

        1、使用哪个拦截器  2、拦截器拦截请求  3、排除哪些请求

        }

  • RestFul风格(搞个机会把之前的项目请求改成RestFul风格)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
* @GetMapping 查
* @PostMapping 新增
* @PutMapping 更新
* @DeleteMapping 删除
* */

/*
* @RequestParam
* @PathVariable
* @RequestBody 接收请求json格式数据,将json格式数据转为对象 @Validated @RequestBody
*
* 浏览器只支持get、post请求 其他方式一般都用于系统间通讯
* */

RestFul风格请求