Spring

IOC 与 DI

IoC 容器实际上就是个Map(key, value) ,Map 中存放的是各种对象, 通过配置Bean工厂, Spring 时代我们⼀般通过 XML ⽂件来配置 Bean,后来开发⼈员觉得 XML ⽂件来配置太繁琐,
于是 SpringBoot 注解配置就慢慢开始流⾏起来。
DI是依赖注入, 是IOC这种设计理念的具体实现方式, DI通过使用java的反射和工厂模式来实现DI
image

反射实现DI

反射: 咱们写的代码是存储在后缀名是 .java的文件里的,但是它会被编译,最终真正去执行的是编译后的 .class文件(即字节码文件)
要想反射,首先第一步就是得到类的字节码
所以简单说一下得到类的字节码的几种方式
(1)、Class.forName("com.cj.test.Person"); 这就是上边我们用的方式

(2)、对象.getClass();

(3)、类名.class;

点击查看代码
	IOC源码解析
	
//解析<bean .../>元素的id属性得到该字符串值为“accountDao”
String idStr = "accountDao";
//解析<bean .../>元素的class属性得到该字符串值为“com.fym.dao.impl.AccountDaoImpl”
String classStr = "com.fym.dao.impl.AccountDaoImpl";
//利用反射知识,通过classStr获取Class类对象
Class<?> cls = Class.forName(classStr); //得到字节码文件 .class
//实例化对象
Object obj = cls.newInstance();
//container表示Spring容器
container.put(idStr, obj);

bean

  • id:bean的名称,通过id值获取bean

  • class:bean的类型

  • name:bean的名称,可以通过name值获取bean,用于多人配合时给bean起别名

  • scope

    • singleton
    • prototype

注解开发(不用写xml文件了)

  • @Controller、@Service 、@Repository是@Component的衍生注解,功能同@Component, 即设置该类为spring管理的bean, (@Controller,@Service,@Repository)是mvc模式开发下的注解

  • 自动注入@Autowired 用于注入引用类型的数据(类的reference)

  • @Bean
    https://www.hangge.com/blog/cache/detail_2506.html
    默认情况下 Bean 名称就是方法名,比如下面 Bean 名称便是 myBean:

@Bean
public MyBean myBean() {
    return new MyBean();
}

spring mvc

Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。

和springboot的关系

SpringBoot是基于SpringMVC无配置文件(纯Java)完全注解化+内置tomcat-embed-core实现SpringBoot框架,Main函数启动。

用到的设计模式 单例 发布者监听者模式 工厂模式

地址映射 @GetMapping @PostMapping 区别

  • 看前端是怎么写的, 如果写了GET那么就用@Getmapping image

如果用了@GetMapping,只能接收get请求;用了@PostMapping,只能接收post请求。
初学者可能不太清楚RequestMapping、GetMapping、PostMapping的区别。

@RequestMapping是一个无方法的注解。@GetMapping和@PostMapping是组合注解,分别是@RequestMapping(method = RequestMethod.GET)和@RequestMapping(method = RequestMethod.POST)的缩写。
GET、POST是方法的映射,表示为
@RequestMapping(method = RequestMethod.${方法})

在一开始的映射是使用@RequestMapping(method = RequestMethod.${方法})来表示。后来Spring4.3中引进了@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping注解来帮助简化常用的HTTP方法的映射。

什么时候用GET,什么时候用POST?

GET方法:客户端与服务端之间是读取操作(如搜索、读、查询操作)。
POST方法:

  • 1.交互是一个命令或订单(order),比提问包含更多信息
  • 2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务
  • 3.用户需要对交互产生的结果负责

根据HTTP协议规定,GET方法可以携带交互需要的所有数据,因此你会看到搜索百度或谷歌的时候,点击搜索形成的URL包含了你刚才的搜索关键字,没有安全需求的请求把信息放URL里没关系,但是你访问银行网站的时候,不希望把账户、密码这些放在URL里被人拦截是吧,所以HTTP设计了POST请求,他可以把请求信息放在HTTP请求里,具体格式这里不细说了,这样你就不能简单的从URL里找到账户、密码了。参考

posted @ 2022-01-14 17:36  lying_flat  阅读(63)  评论(0)    收藏  举报