我的小记性

 状态码:

200 请求成功

500 服务器内部错误 后台控制台会报错

404 资源为找到 1.请求处理了但是返回的内容不能找到跳转的路径2.请求没接收到(断点调试)

405 请求方式不匹配 检查前后台请求方式处理方式是否一致

400 参数不能正常映射 1.检查参数名称2.检查参数类型(String--->Date 后台加入@DateTimeFormat注解)

 

字节流与字符流的区别

  • 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。字节流默认不使用缓冲区;字符流使用缓冲区。

  • 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;

  • 字符流通常处理文本数据.它支持写入及读取Unicode码元。





Ioc源码学习

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:

 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
     <!-- 配置student -->
     <!-- scope 对象作用域: 单例 原型 -->
     <!-- 对象的构建方式: 默认构造器 有参构造器 工厂方法 -->
     <!-- 依赖的注入方式: setter属性 构造器参数 注解注入 -->
     <bean id="student" class="com.wsk.bean.Student" scope="singleton" >
         <property name="name" value="小明"></property>
         <property name="tClass" value="tClass"></property>
 </bean>
     <!-- 配置class -->
     <bean id="tClass" class="com.wsk.bean.TClass" scope="singleton" >
         <property name="cname" value="3年2班"></property>
         <property name="teacher" ref="teacher"></property>
     </bean>
     <!-- 配置teacher -->
     <bean id="teacher" class="com.wsk.bean.Teacher" scope="singleton" >
         <property name="tname" value="陈老师"></property>
     </bean>
 </beans>

创建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();
    }
 }

报错阶段,不用试

 
posted @ 2022-06-18 21:34  为了她  阅读(42)  评论(0编辑  收藏  举报