Spring

Spring

ioc

di

  1. Spring容器实在内存中开辟一块区域,用于存储管理对象
  2. 数据结构: Key(类型首字母小写)-Value(对象)
  3. 数据类型: Map集合

依赖注入原理

  1. 默认按照类型注入
    按照属性的类型去Map集合中查找是否有该类型的对象,如果有则注入
    按照名称注入,根据属性的name去Map集合中查找对应的Key
  2. 规则:
    如果对象在进行实例化且对象的属性被@Autowired注解修饰则说明应该先注入属性
    首先根据属性的类型 查找Map集合中是否有该类型的对象
    如果根据类型查找没有找到则根据属性的名称按照name查找对象
    如果上述方式都没有找到则报错实例化对象失败
    Spring容器中要求接口必须单实现,如果有多实现则通过@Qualifier(“xx”)区分
@Autowired
@Qualifier("value=xxx")
//      类型     属性
private Service service;

Spring MVC

Spring MVC调用流程

前端控制器:实现请求的流转
处理器映射器:实现请求路径与方法的映射,内部有K:V结构,Key存放预先设定好的URL的路径,Value存放方法的全路径
处理器适配器:处理器的管理器,内部有N个处理器,针对不同需求调用不同处理器
视图解析器:执行页面内容

1.用户发送请求到后端,被前端控制器拦截
2.前端控制器转发请求到处理器映射器,根据URL查找能处理的方法(预先存放好的url路径与方法的全路径)
2.1 如果没有找到对应的方法则返回null给前端控制器,然后前端控制器返回404
2.2 如果拿到特定的数据则交给前端控制器
3.前端控制器继续向下执行调用处理器适配器,根据处理器映射器的结果找到对应的控制器,并开启执行业务层代码
4.执行业务层代码返回给处理器适配器,处理器适配器在返回Model(业务数据)AndView(页面路径) 被包装过的数据给前端控制器
5.前端控制器再去找视图解析器,视图解析器拼接完整的页面路径前缀/xxx.后缀(html等等)
6.视图解析器将数据交给视图渲染,将数据与页面进行渲染,用户可以看到的数据,交给前端控制器
7.前端控制器将渲染过的数据交给前端

由于流行前后端分离,所以不需要在后端对页面进行操作,而是直接交给前端操作,所以图中6,7不执行
可以执行分离的操作是因为@ResponseBody注解,直接将ModelAndView转成JSON传给前端
在这里插入图片描述

Servlet

Servlet 概述

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

总结: Servlet是java与前端页面进行数据交互的一种机制
核心对象:

  1. request对象 封装用户请求的参数/请求头/请求全部内容
  2. response对象 封装用户响应信息

Servlet获取参数规则

简单的方式
/**
     * 注意事项: 如果后端服务器没有匹配的方法,也会报跨域错误.
     * URL:http://localhost:8090/getUserById?id=1&age=18
     * 参数: id=1
     * 返回值: User对象
     * servlet特点:
     *  1.获取的数据都是String类型
     */
    @GetMapping("/getUserById")
    public User getUserById(Integer id){
       //1.SpringMVC框架通过Servlet中request对象,根据参数名称获取值
        // String id = request.getParameter("age");
        //2.SpringMVC根据已知的数据类型 自动的实现数据转化
        return null;
    }

    /*@GetMapping("/getUserById")
    public User getUserById(HttpServletRequest request,
                            HttpServletResponse response){
        //1.参数获取 每个参数都需要手动获取
        String id = request.getParameter("id");
        String age = request.getParameter("age");

        //2.数据类型转化
        int intId = Integer.parseInt(id);
        System.out.println("根据ID查询数据库~~~~~");

        return null;
    }*/

对象方式

在这里插入图片描述

/**
     * URL: http://localhost:8090/getUserByUser
     * 参数: user对象的数据
     * 返回值: User
     */
    @GetMapping("/getUserByUser")
    public User getUserByUser(User user){
        //1.SpringMVC如果解析到参数是对象 先获取其中的Get方法
        // getId()/getName()......
        //2.将方法get去除首字母小写~~~id1111/name/age/sex
        //3.实例化一个User对象之后调用setxxx()方法实现赋值
        //4.最终方法中获取一个实例化的User对象
        //String id = request.getParameter("id");
        return user;
    }

Maven

maven坐标查询
https://mvnrepository.com/
在这里插入图片描述
在这里插入图片描述

跨域问题

同源策略

同源策略是什么

同源策略是一个重要的安全策略,用于限制一个origin文档或者它加载的脚本如何能与另一个源的资源进行交互,用来阻隔恶意文档,减少被攻击的媒介

同源的定义

如果两个URL的protocol(协议)、port(端口)和host都相同的话,则这两个URL是同源,这个方案也称为"协议/主机/端口元组",或者直接是"元组"
判断条件是根据元组进行判断的,如果元组不一致那么,就不是同源
在这里插入图片描述

跨域解决策略

JSONP

JSONP(JSON with Padding)是JSON的一种“使用模式”可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
核心知识: 利用 <script src属性=“获取远程服务器数据”> 实现跨域访问.

CORS 跨域资源共享

跨域资源共享( CORS ) 是一种基于HTTP 标头的机制,它允许服务器指示浏览器应允许从其加载资源的任何其他来源(域、方案或端口)。CORS 还依赖于浏览器向托管跨域资源的服务器发出“预检”请求的机制,以检查服务器是否允许实际请求。在该预检中,浏览器发送指示 HTTP 方法的标头和将在实际请求中使用的标头。
解释:
跨域资源共享(CORS),通过Http响应头信息标识哪些网址可以访问服务器,现在几乎所有的浏览器默认支持CORS,在请求之前会进行预检 如果预见成功则一段时间之后无需检验(30分钟)
报错信息:
在这里插入图片描述

注解解决跨域问题

1、标识注解
在这里插入图片描述
2、响应头信息
在这里插入图片描述

注解

接收请求返回响应

@RestController
将要响应的数据转化为Json串
@ResponseBody

控制层的Ioc注解

@Controller

跨域注解

@CrossOrigin

映射关系

可以接收所有类型的映射注解
@RequestMapping("/请求路径")    
接收Get类型的映射注解
@GetMapping("/请求路径")   
接收Post类型的映射注解
@PostMapping("/请求路径")		
接收Delete类型的映射注解
@DeleteMapping("/请求路径") 	
接收Put类型的映射注解
@PutMapping("/请求路径")		

用于指定请求传来的参数

@PathVariable  

通用注解

DI、自动装配、自动布线 ,从Bean容器中拿到关联的Bean对象
@Autowired   
	@Resource(name = "user")
	@Qualifier("user")
全局定义Ioc
@Component
将请求的传来的数据转化为对象
@RequestBody
重写注解
@Override
定义Advice
@ControllerAdvice  一般不同了
@RestControllerAdvice 定义全局异常的处理类
@ExceptionHandler 表示拦截的异常类型
	属性:运行时异常、编译时异常,全异常,自定义异常

业务层注解

业务层的Ioc注解
@Service   
@Transactional 事物控制 
	属性: rollbackfor: 配置特殊类型异常,进行事物控制
				noRollBackFor: 配置特殊类型异常,不进行事物控制

Dao层注解

Dao层的Ioc注解
@Repository  

接口文件

@Select()
@Update()
@Delete()
@Insert()

对象绑定表 @TableName(“demo_user”)

主键自增 @TableId(type = IdType.AUTO)

对象属性绑定表中字段,字段与属性一致可以不用写,支持驼峰语法,如果不一致需要指定@TableField(“name”)

@RefreshScope 当配置中心的值发生变化后,如果需要对对应的属性进行动态刷新则加入这个注解

主启动类 @SpringBootApplication

扫描接口并创建代理对象 @MapperScan(“com.jt.mapper”)

配置

@Configuration
@Bean
@propertySource
@LoadBalanced 负载均衡

获取配置文件中定义的值 @Value("${person.name}")

@SentinelResource(“doGetResource”)

@ConditionalOnMissingBean(“xxx.class”)

@ConditionalOnBean(“xxx.class”)

测试 @SpringBootTest

  1. SpringBoot程序为了简化后端代码测试,提供了专门的测试API
  2. 测试时需要Spring容器管理对象,同时将测试的对象获取之后进行测试
  3. 测试包路径必须在主启动类的同包或子包中
    导入依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>

在这里插入图片描述

首选注入的对象

@Primary

排除默认配置

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

读取配置文件注入到对象中

@ConfigurationProperties(prefix = “spring.datasource”)
@Bean
//读取配置文件注入到对象中
@ConfigurationProperties(prefix = “spring.datasource”)
public DataSource dataSource(){
return new HikariDataSource();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值