我的小记性
状态码:
200 请求成功
500 服务器内部错误 后台控制台会报错
404 资源为找到 1.请求处理了但是返回的内容不能找到跳转的路径2.请求没接收到(断点调试)
405 请求方式不匹配 检查前后台请求方式处理方式是否一致
400 参数不能正常映射 1.检查参数名称2.检查参数类型(String--->Date 后台加入@DateTimeFormat注解)
字节流与字符流的区别
-
字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。字节流默认不使用缓冲区;字符流使用缓冲区。
-
字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;
-
字符流通常处理文本数据.它支持写入及读取Unicode码元。
IOC基础回顾
: 有3个实体类,关系如下:
学生对象 依赖 班级对象
班级对象 依赖 教师对象
学生:
package com.wsk.bean;
public class Student {
private String name;
private TClass tClass;
public void sayHello(){
System.out.println("大家好,我是:"+this.name+",我的班级是==》"+tClass.getCname()+"" +
",我的老师是:"+tClass.getTeacher().getTname());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TClass gettClass() {
return tClass;
}
public void settClass(TClass tClass) {
this.tClass = tClass;
}
}
班级:
package com.wsk.bean;
//班级类依赖教师对象
public class TClass {
private String cname;//班级名
private Teacher teacher;//教师
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
老师:
package com.wsk.bean;
public class Teacher {
private String tname;//老师名称
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
如果需要执行学生对象的sayHello方法, 那么需要我们依次创建 学生对象,所在班级对象,班级的教师对象,并需要将他们的关系维护好。
不使用IOC的情况:
package com.wsk.bean;
/*
不使用IOC的解决方案
*/
public class Test01 {
public static void main(String[] args) {
//管理学生对象
Student student = new Student();
student.setName("小王");
//管理班级对象
TClass tClass = new TClass();
tClass.setCname("九年六班");
//管理教师对象
Teacher teacher = new Teacher();
teacher.setTname("宋老师");
//设置学生所属班级
student.settClass(tClass);
//设置班级任课老师
tClass.setTeacher(teacher);
//调用学生类中的sayHello方法
student.sayHello();
}
}
可以看到,我们只想调用学生的业务方法,但是我们要准备好所涉及的所有对象,
并且将这些代码全部硬编码到了程序中。
这样会有两个明显的问题
1. 工作效率,程序员写程序时对对象的构建及依赖关系编写了大量代码
2. 耦合问题, 后续如果这些对象的配置产生了变化,散落在程序中的代码都需要我们维护
如: 如果我们使用 JDBC 要创建一堆相关的API对象
如果我们使用Mybatis 要创建一堆相关的API对象
。。。。。
但实际上他们都有一套固定的写法,程序员在写他们的基础创建就是在浪费时间,有没有一种办法来帮助我们管理这些对象呢? SpringIOC就可以!!
SpringIOC核心特性:
IoC:Inverse of Control(控制反转): 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
DI:Dependency Injection(依赖注入): 在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
SpringIOC体系结构:
Spring在实现IOC容器时,一些重要的类
编号 | 名称 | 描述 |
---|---|---|
1 | BeanFactory | 【重点】Spring容器的顶级接口,定义了容器的最基本的功能。 |
2 | XmlBeanFactory | 最基础的容器实现类,现已废弃 |
3 | ListableBeanFactory | BeanFactory接口中的getBean方法只能获取单个对象。ListableBeanFactory可以获取多个对象 |
4 | HierarchicalBeanFactory | 在一个spring应用中,支持有多个BeanFactory,并且可以设置为它们的父子关系。比如ssm框架整合中的两个ioc容器 |
5 | ApplicationContext | 【重点】Spring高级容器,是我们经常使用的容器。它同时继承了 ListableBeanFactory和HierarchicalBeanFactory接口 |
6 | ConfifigurableApplicationContext | 支持更多系统配置的工厂接口。比如:conversionService、environment、systemProperties、systemEnvironment |
7 | DefaultListableBeanFactory | beanFactory的核心实现类 |
8 | ClassPathXmlApplicationContext | 【重点】项目中,直接使用的工厂实现类。从类的根路径下加载配置文件,创建spring ioc容器 |
9 | FileSystemXmlApplicationContext | 可以加载磁盘任意路径下的配置文件,实现容器的实例化。(必须有访问权限) |
10 | AnnotationConfifigApplicationContext | 【重点】扫描配置注解,根据注解配置实现容器的实例化。 |
用IOC的情况:
基于Xml的方式配置Bean
引入依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
配置bean:
创建IOC容器,并获取对象:
public class Test02 {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("main/java/com/wsk/bean/applicationContext.xml");
Student student = (Student)context.getBean("student");
student.sayHello();
}
}