day05
IOC控制反转的思维
回顾
- 用配置文件代替工厂模式,其实配置文件就是一个工厂模式
- 任何框架的出现是简化代码,应该是越做越简单
IOC
-
是一个容器,装什么东西呢?装的是一堆对象,放的是一堆配置文件中配置的对象,他们装到容器中,spring自己放进IOC,我们只需要配置就好了,不需要自己去放
-
单元测试工具Junit,首先导包,JUntil还有导入spring-test测试包,版本号要保持一致
-
@RunWith("SpringJUnit4ClassRUnner.class)
@COntextConfiguration(locations=“classpath:applicationContext.xml”) -
读配置文件,第一个@RunWith()
-
把配置文件中的三个对象放进IOC容器
-
做的是依赖注入
-
@Resource 是控制反转
正这转和反着转的解释
-
思维:正这转:自己去获取一个对象(可以new,可以调用方法获取)
-
反着转:当我们需要一个主板对象时,也不用自己new和调用方法,在IOC容器中,我们需要那个容器, 哪个对象自己过来赋值
那个对象符合我赋值的条件,自己过来赋值; -
房屋中介和舔狗的例子
-
依赖注入只能发生中IOC容器中,********
手段 依赖注入
- 将对象方剂IOC容器中,进行依赖注入
- 怎样将对象放进IOC容器中呢?扫描某个包
但是并不会把包下所有的类都放进IOC容器中
如果包下类放进IOC,把类加注解**************注解如下
-
注解 @Component //搞不清楚放那一层
@Repository //仓库
@Service //service
@Configration //配置类
@Controller //controller -
依赖注入@Resource
应用范围
- 什么时候扫描包+注解,什么时候配置bean节点
- 自己写的类扫描包+注解
- 外部引入的类用bean节点
set注入
-
配置bean的时候,property为某个属性赋值(调用set方法),set注入
-
用property注入的时候,必须保证该属性有set方法
-
property中的name并不是属性名字,是set方法,
规则: 把set去掉,第一个字母变成小写 -
setId -->id
构造注入
- 通过调用构造方法为属性赋值 构造注入
- 所谓注入就是赋值
- constructor-arg
- 用构造注入,必须有构造方法
精彩问题
-
i3,i5,i7都加上了注解,会出现报错的效果
-
解决方案:1、去掉注解,只添加一个
-
2、中介给你三个,你自己选择一个,@Resource(name=“i3”),添加到cpu上
springmvc如何前后分离并且返回json
-
乱码的问题
-
解决问题:我们采用fastjson,只要把默认的消息转换器改成fastjson的消息转换器就可以
-
如果是个list
前后端分离用spirngmvc;
** 修改消息转换器 是springmvc
-
在mvn:annotation-driver
<mvc:message-converters register-defaultes=“false”>
application/json;charset=utf-8
</…>
</…>
</…>
</…> -
第一个;把默认消息转换器删除
-
将fastjson添加进来
警告
- 如果做前后端分离,用springboot,不要用springmvc
IO
-
IO: input和output
-
用处:数据的传输,
-
string str=“abc”;在常量池,程序运行以后,所有的数据都在内存中,我们把程序中的数据和其他地方的数据其他地方的数据进行通讯叫做IO,
I: input 把其他地方的数据读入内存中
O : output 把当前程序的数据写入到其他地方 -
内存和硬盘
-
一个进程的数据和另一个进程的数据通讯,都在内存,也算IO,
-
一个服务器进程和另一个服务器进行的数据也是IO
** 举例子:单机游戏:数据保存在内存中,游戏中途为了防止进程意外结束,防止数据丢失,我们要亲存档,将 游戏中的数据写入硬盘中,每一次存到就是一次IO操作
-
读档: 将硬盘中的数据读入游戏的内存中,
-
读取文件:需要一个文件对象:File
-
FIle file = new File(“文件路径 d:/Test.java”);
每一层路径用一个/或者\ -
.length()输出的是字节203;
-
File对象只能对文件进行操作,创建,删除,
但是无法对文件中的内容进行操作******** -
createNewFile(); delete();
-
如果要对内容进行操作,需要使用IO流
-
对文件进行读取,InputStream是抽象类,文件读入
inputStream是字节流 -
InputStream is = new FileInputStream(file);
-
is.read()
-
read方法
-
如果无参,表示一次读一个字节,返回ascii码
-
读不到内容返回-1
-
有参数
-
byte[],一次读取出符合byte[]长度的数据 返回 本次读取了多少个数据
byte[] array = new byte[10]; -
is.read(array)
-
i 读不到的话还是-1,
new String(array, 0,i);将byte数组转换成字符串
编码
-
gbk中文2字节,utf-8中文是3个字节
-
有中文的文本不适合用字节流
-
用什么?字符流 用中文需要用字符流
-
字符流 Reader reader = new FileReader();
-
reader.read(char数组)
-
reader.read();按照字符读的,没有参数
-
流是资源,所以使用之后一定要关闭
-
字节流转成字符流:InputStreamReader
-
关闭的时候后进先出
-
BufferedReader bufferReader = new BufferedReader(isr); 参数是InputStreamReader对象,
-
有.readLine();读取一行
//1、Reader对象进行操作
// try {
// boolean newFile = file.createNewFile();
// System.out.println(newFile);
// Reader reader = new FileReader(file);
// int i = reader.read();
// while (i != -1){
// System.out.print((char)i);
// i = reader.read();
// }
//
//
// } catch (IOException e) {
// e.printStackTrace();
// }
//2、字节流InputStream对象 .read()方法无参
// try {
// file.createNewFile();
// InputStream inputStream = new FileInputStream(file);
// int i = inputStream.read();
// while(i != -1){
// System.out.print( (char) i);
// i = inputStream.read();
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
//3、字节流InputStream对象 .read()方法有参数,其中参数是byte数组
try {
file.createNewFile();
InputStream is = new FileInputStream(file);
// byte [] arr = new byte[5];
byte [] arr = new byte[100];
int i = is.read(arr);
while(i != -1){
System.out.print(new String(arr,0,i));
i = is.read(arr);
}
} catch (IOException e) {
e.printStackTrace();
}
//4、字节流转换成字符流,还有对于BufferedReader对象的使用,其中Reader对象的底层用的是InputstreamReader
try {
file.createNewFile();
InputStream is = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(is);
//BufferedReader
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
// char [] arr = new char[10];
// int i = inputStreamReader.read(arr);
// while(i != -1){
// System.out.print(new String(arr,0,i));
// i = inputStreamReader.read(arr);
// }
//
// //关闭的话后进先出
// inputStreamReader.close();
// is.close();
String str = bufferedReader.readLine();
while (str != null)
{
System.out.println(str);
str = bufferedReader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}