快速下载生成一个springboot项目

https://spring.io/quickstart

效果

  1 启动 

 

 

  2 访问

 

 

Building a RESTful Web Service

https://spring.io/guides/gs/rest-service/#scratch


译文:@RequestParam将查询字符串参数name的值绑定到greeting)方法的name参数中。如果在请求中没有name参数,则使用World的defaultValue。方法主体的实现创建并返回一个新的Greeting对象,该对象具有基于计数器的下一个值的id和内容属性,并使用Greeting模板格式化给定的名称


译文:传统MVC控制器和前面展示的RESTful web服务控制器之间的一个关键区别是HTTP响应体的创建方式。这个RESTful web服务控制器不是依赖视图技术来执行问候数据到HTML的服务器端呈现,而是填充并返回一个greeting对象。对象数据将作为JSON直接写入HTTP响应。这段代码使用Spring @RestController注释,它将类标记为控制器,其中每个方法返回一个域对象而不是视图。它是包含@Controller和@ResponseBody的缩写

Greeting对象必须转换为JSON。由于Spring的HTTP消息转换器支持,您不需要手动进行此转换。因为Jackson2位于类路径上,Spring的MappingJackson2HttpMessageConverter被自动选择来将Greeting实例转换为JSON。

@SpringBootApplication是一个方便的注释,它添加了以下所有内容:

@Configuration:将类标记为应用程序上下文的bean定义源。

@EnableAutoConfiguration:告诉Spring Boot开始基于类路径设置、其他bean和各种属性设置添加bean。例如,如果spring-webmvc在类路径上,该注释将应用程序标记为web应用程序并激活关键行为,例如设置DispatcherServlet。

@ComponentScan:告诉Spring在com/example包中查找其他组件、配置和服务,让它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行XML?也没有web.xml文件。这个web应用程序是100%纯Java的,您不需要配置任何管道或基础设施。

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}


@SpringBootApplication
public class DemoRestApplication {

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

}

效果

 

 

 

 

 

 

 

 

粗整体学习

https://www.bilibili.com/video/BV13R4y1F7aq/?spm_id_from=333.999.0.0&vd_source=562955621af926e4655ded0199c26c61 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

构造函数

 

 

 

 

 

 

 所以

spring调用构造方法,是通过预定好的规律,推断使用哪个构造方法

 

循环依赖

单例

orderservice是单例bean, 我们往springbean容器中存orderservice对象的时候,要看我们自己定义了多少bean,并不是springbean就只会存一个。

 

 

 

 

 

 

 

接着看,

 

 

 

  

根据类型去找, 找到j几个bean,在根据名字找到一个,否则报错。  如果根据类型去找,只找到一个,就不会根据名字去找。

规则:1 bytype 2 byname

 

aop, 代理对象, cglib

 

 

 

代理对象没有依赖注入

 

但是执行的时候填充值了

 

 

解释

 

 

 

 需要了解的原理

cglib+ 代理模式

完成代理对象,设计模式的源码

 

 

普通对象是存在jvm堆里面的,spring的代理对象会在容器中,指向普通对象

 

 

 、

 

 

 

 

 

 

 

 

 

spring事务及其传播机制

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上面是现象

 

 

 

 

 

 

 

 

 

 

 

如果希望a方法的注解起作用,怎么办

 

 执行的对象变了。

 

 

 

 

 

@configuration

 

 

 

 

 

 

 

 

也是依赖注入的,代理对象的原理。  也就是最终拿到的对象问题。

 

 

 

 

循环依赖