https://blog.csdn.net/topdeveloperr/article/details/81194654
我们在编辑器里写的是.java文件,编辑器帮我们生成对应的.class文件,所以jvm读取的是.class文件
.class文件要经过加载,链接,初始化
加载是加载静态代码块和静态变量,不包括成员变量
同时在内存中生成一个.class对象
数据库里的字段名/列名 column 是 roleName,而 User 对象的属性名则为 userRoleName ,此时就需要做映射
数据库字段信息与POJO对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果
3.mybatis里面xml文件写输入的时候,即比如输入的是一个自定义类,parameterType=User,此时可以在SQL语句中直接调用这个User里面的对象属性,直接写他的名字就好了,id,name之类的
需要被初始化的Bean是一个类class,所以你这时就不能用value来赋值,要用的ref来赋值了
https://blog.csdn.net/yongh701/article/details/78475266
https://blog.csdn.net/volcano1995/article/details/89111140
所谓的切入面类,就是这个类里面的所有方法method都可以作为advice消息通知器,就是before,after这类的,所以通知其实是类的方法method
如果不使用切面类就这样写,这里的ref就是切面类
https://www.cnblogs.com/rainy-shurun/p/5195439.html
里面讲了execution参数
可以放在类里面对属性的定义上,private。。。的时候加
同时也可以在类里面的set方法上使用,甚至放在属性定义的上面的时候,整个类可以省略set方法
@qualifier这个注解是是对auto wire的补充,我们现在可以指定名字来实现属性的注入,即自动绑定IOC容器中的类
用spring融合mybatis
原始的mybatis框架的中的open sqlsession的流程可以看成是
inputSrream=Resource.getResoruceAsStream(resouce) sqlSessionFactoryBuilder().build(inputStream)
像这样的实例化对象的过程在spring里面都被简化了,通过专门的xml文件写进容器里面,此时
datasource是mybatis-utilis.xml文件里面关于连接数据库的配置信息
sqlfactory连接了inputstream,并实例化了sqlfactory
springmvc里的非注解开发
1.当你输入网址localhost:8080:…/hello时,mvc怎么帮你找到这个网址对应的controller的处理类,这个处理类是怎么把处理好的视图交给视图解析器,视图解析器怎么匹配到对应的jsp文件,然后显示到用户面前的
首先我们使用的是BeanNameUrlHandlerMapping的方法来匹配输入的网址和我们的处理类controller,所以我们需要在web.xml中再加一个类来表明
这样一个类的声明可以确保我们输入/hello的网址,会帮我们匹配到我们写的hellocontroller的文件,所以这句话是一个处理器映射器
那么进入这个类之后,我们进行了处理(比如从数据库拿数据出来),现在我们要把处理好的视图给视图解析器,但是视图解析器需要帮我们把自己处理的视图,和待展示给用户的jsp连起来,所以在web.xml文件中,我们配了prefix和suffix,里面的值是我们工程的路径名
同时我们在controller类中通过mv.setMvName的方式为我们处理好的视图命名,比如hello,这样这个处理好的视图会和/WEB-INF/jsp/hello.jsp绑定,实现了输出
2.注解开发
注解首先在我们的controller类上加上@controller,这样这个controller类就注册在了spring容器里,不需要在web.xml文件里注册,但是我们怎么知道输入哪个网址就可以转到这个处理类来处理呢,就需要@requestmappering来实现url的请求,这样url就和我们这个类绑定了.
那这个类怎么和jsp绑定呢,可以使用return "hello"的方式,还是通过视图解析器的prefix和suffix,实现绑定,也可以
tomcat是web服务器+servlet容器。客户端的请求直接打到tomcat,它监听端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
当请求来容器第一次调用某个servlet时,需要先初始化init(),但当某个请求再次打到给servlet时,容器会起多个线程同时访问一个servlet的service()方法。
Servlet容器默认是采用单实例多线程的方式处理多个请求的:
1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);
2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参数值等等。
3.当请求到达时,Servlet容器通过调度线程(Dispatchaer Thread) 调度它管理下线程池中等待执行的线程(Worker Thread)给请求者;
4.线程执行Servlet的service方法;
5.请求结束,放回线程池,等待被调用;
(注意:避免使用实例变量(成员变量),因为如果存在成员变量,可能发生多线程同时访问该资源时,都来操作它,照成数据的不一致,因此产生线程安全问题)
从上面可以看出:
第一:Servlet单实例,减少了产生servlet的开销;
第二:通过线程池来响应多个请求,提高了请求的响应时间;
第三:Servlet容器并不关心到达的Servlet请求访问的是否是同一个Servlet还是另一个Servlet,直接分配给它一个新的线程;如果是同一个Servlet的多个请求,那么Servlet的service方法将在多线程中并发的执行;
第四:每一个请求由ServletRequest对象来接受请求,由ServletResponse对象来响应该请求;
请求转发:(感觉就是正常的servlet工作流程)
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
重定向:(是让客户端重新发一个url请求,servlet本身的数据都丢了)
客户发送一个请求到服务器,服务器匹配servlet,servlet处理完之后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。(服务器向浏览器发送一个302状态码以及一个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)
一个浏览器窗口里面传递,就是同一个窗口,可以点旁边不同的侧边栏,都保有这个数据
session从用户访问到用户结束,120min
session是同一个浏览器访问多次,多次访问内传递消息
那么我进行了登陆加退出,那岂不是我的session即使在退出之后仍然保存——————确实是这样的,不在每次logout中销毁session的话,就会出现session中的username和pwd仍然保存在浏览器内
————————session的信息保存在哪里?本地的浏览器还是服务器?——————————服务器
异步请求里的request是一个异步请求一个request吗
只要在JSP文件里调用request,那么前后端就没有分离,真正的分离前端界面只能调用response,而这个response是通过ajax请求发送
现在的前后端开发,前端也会进行一次认证
认证是在前后端第一次交互的时候会给本地的cookie生成一个token或者秘钥之类的东西
然后每次交互都会携带这个秘钥,所以前端网页才能进行判断
但是如果不这样做,那前端的cookie发什么后端就认证了,很不安全
就是前端用李睿洁的账号密码登陆,但是cookie里面改成刘旭宸,后端就会认为是刘旭宸登陆了,返回给李睿洁一个刘旭宸的资料界面
https://www.cnblogs.com/l199616j/p/11195667.html
动态代理的好处到底有啥:1.静态代理里面一个接口,正常的委托类要实现这个接口,代理类也要实现这个接口
像是wedding这个接口
me要实现,婚庆公司也要实现,所以如果我们在原接口里加一个方法,会要改double个
但是在动态代理里面,由于代理类是自动生成的,我们只有工厂类,也就是必须实现的那个类(因为JDK中动态代理必须要接口,其实这个接口也可以省略的)才用去更改,所以更方便
脚本语言(Python)是更高级的语言,是通过解释器来运行的,跳过了编译的过程。所以无需编译,直接运行,速度更快,且不想编译语言那么严谨,因为编译是全局编译
那么解释器是啥,感觉是计算机内核和我们写的脚本语言之间的桥梁,负责把我们写的脚本语言翻译成内核,即硬件能理解的语言。所以真正执行的速度来说,java经过编译之后生成的.class即字节码文件在被JVM解释成硬件语言后硬件直接运行,跳过了解释的过程,所以运行起来速度很快。但是需要先编译
Java是伪跨平台,不同操作系统(平台)上必须要有对应的JVM,字节码是跨平台的,但是需要JVM编译后才能运行
常规的MVC工程中,我们需要在不同的层,DAO,CONTROLLER中的类要注册到IOC容器中,此时这个类就被注入了。但是这样的@controller的注解只能注解类,而且是自己写的,如果有一个第三方的类出现,我们想完成赋值并注入,用@controller就不合适了(?是因为不知道把它放在哪一层吗?),所以我们就要通过构造一个方法的形式来完成对这个类的赋值,然后把赋值好的类注射到IOC中,所以就出现了@Bean,他只能放在方法上,是将这个方法返回的类注入到IOC容器
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法
看这几篇,很不错:
https://blog.csdn.net/liuyinfei_java/article/details/82011805?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&utm_relevant_index=7
https://blog.csdn.net/qq_34484062/article/details/101283056?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&utm_relevant_index=2
https://www.cnblogs.com/yanggb/p/14897327.html
@component和@configuration的区别?我看不懂
https://blog.csdn.net/long476964/article/details/80626930
其中的这个回答
我们在调用注入到IOC容器的对象的时候,走的都是单例模式,具体体现在autowired上面,但是,文章验证的方式不是走的IOC容器中调用的方式,而是在@bean的类里面new了一个对象出来——这是个代理而不是调用,所以才会触发两个注解之间的区别
所以这个东西是在动态代理的时候需要注意,因为动态代理才会涉及到代理模式
为什么POJO不注入到IOC中https://blog.csdn.net/qq_40602785/article/details/105168547
在实际开发中用户的需求是不断变化的,而为了满足用户需求变化的同时不改变原有代码就需要引入 IOC 。这些实体类不会因为用户的需求变更而改变



