0%

后端练习生(一)

后端基础学习(一)

Restful API

一种架构风格,全称:Resource Representational State Transfer 表现层状态转移
当通过 RESTful API 提出请求时,它会将资源状态表述传递给请求者。该信息或表述通过 HTTP 以下列某种格式传输:JSON(Javascript 对象表示法)、HTML、XLT 或纯文本。JSON 是最常用的格式,尽管它的名字英文原意为”JavaScript 物件表示法”,但它适用于各种语言,并且人和机器都能读。

工程结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
java
+-com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
| +- CustomerController.java
|
resource
| +- Application properties
| +- templates
| +- static

  • root package:com.example.myproject,所有的类和其他package都在root package之下。
  • 应用主类:Application.java,该类直接位于root package下。通常我们会在应用主类中做一些框架配置扫描等配置,我们放在root package下可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容
  • com.example.myproject.domain包:用于定义实体映射关系与数据访问相关的接口和实现
  • com.example.myproject.service包:用于编写业务逻辑相关的接口与实现
  • com.example.myproject.web:用于编写Web层相关的实现,比如:Spring MVC的Controller

上面的结构中,root package与应用主类的位置是整个结构的关键。由于应用主类在root package中,所以按照上面的规则定义的所有其他类都处于root package下的其他子包之后。默认情况下,Spring Boot的应用主类会自动扫描root package以及所有子包下的所有类来进行初始化。

如果非要放在root package之外

  1. 可用@ComponentScan注解指定具体的加载包
    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @ComponentScan(basePackages="com.example")
    public class Bootstrap {
    public static void main(String[] args) {
    SpringApplication.run(Bootstrap.class, args);
    }
    }
  2. 使用@Bean注解来初始化
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @SpringBootApplication
    public class Bootstrap {

    public static void main(String[] args) {
    SpringApplication.run(Bootstrap.class, args);
    }

    @Bean
    public CustomerController customerController() {
    return new CustomerController();
    }

    }

SpringBoot项目中主要的注解

  • @Conponent
    @Component:是Spring中用于描述Bean类的一个注解。用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。
  • @SpringBootTest:该注解用于告诉Spring框架,此测试类交给Spring管理。
  • @Autowired:该注解描述属性时,用于告诉Spring框架要为此属性注入一个值。其基本规则是:
    1. 首先,要检测容器中是否有与属性或方法参数类型匹配的对象,假如有并且只有一个则直接注入。
    2. 其次,假如检测到有多个,还会按照@Autowired描述的属性或方法参数名查找是否有名字匹配的对象,有则直接注入,没有则抛出异常。
    3. 最后,假如我们有明确要求,必须要注入类型为指定类型,名字为指定名字的对象还可以使用@Qualifier注解对其属性或参数进行描述(此注解必须配合@Autowired注解使用)。
  • @Qualifier:该注解就是对其属性或参数进行描述。
  • @Lazy:该注解用于描述类,其目的是告诉Spring框架此类支持延迟加载,通常会配合单例作用域使用。
  • @Scope("singleton/prototype"):该注解是Spring中用于定义Bean对象作用域的一个注解,其常用的值有:
    • singleton:整个内存有一份Bean实例,此实例何时创建与类的延迟加载特性配置有关,此实例创建以后,生命周期会由Spring框架管理。
    • prototype:每次获取都会创建新实例,此实例会在需要时创建与lazy特性无关,这个实例创建以后,不会交给Spring管理,Spring可以对其初始化,但不负责销毁。
  • PostConstruce:该注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建以后的初始化)
  • @PreDestroy:用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。
  • @Mapper:该注解是由MyBatis框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉Spring框架此接口的实现由mybatis创建,并将其实现类对象存储到spring容器。
  • Param:该注解用于将括号内的参数进行引用
  • @Controller:该注解用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了
  • RequestMapping:该注解用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。