IOC 的实现原理:工厂模式(静态+抽象工厂)+反射+配置文件
Spring Bean 的定义:3种创建方式
-
采用(有参无参)构造方法
-
采用静态工厂
-
采用实例工厂
Bean 属性的设置(Dependency Injection)DI依赖注入
两种方式:- 使用Setter
- 使用构造方法容器中的property
Bean对象 的使用:
- 使用id名称获取
- 使用class
Spring 容器在初始化一个Bean的实例时,同时会指向该实例的作用域
1.singleton
单例模式,使用singleton定义的Bean在Spring容器中只有一个实例,这个也是Bean默认的作用域。
2.prototype
原型模式,每次通过Spring容器获取prototype定义的Bean时,容器将创建一个新的Bean 实例。
3.request
在一次http请求中,容器会返回该Bean的同一个实例,而对不同的http请求会返回不同的实例,该作用域仅在当前http的Requst内有效。
4.session
再一次http Session中,容器会返回该Bean的同一个实例,而对不同的http请求会返回不同的实例,该作用域仅在当前http的Session内有效。
5. global Session
在一个全局 http Session中容器会返回该Bean的同一个实例,该作用域仅使用在portlet context 时有效。
Bean 对象的作用域:
(scope=“singleton”/scope=“prototype”,不配置默认singleton)
1.如果Spring容器获取bean的时候,如果是单例(singleton)获取到的是同一个对象
2.如果是prototype,获取的每一次都是新创建的对象。
面试题:配置singleton 和prototype有啥区别?
Servlet中我们是单例的。
每次请求调用service方法,request和response都是prototype。
SpringBoot:
SpringBoot默认的配置项:
- SpringBoot启动类所在的包,在其包下的所有类都会自动扫描,(是否实现了Spring框架的接口,是否使用Spring框架的注解)扫描到以后自动注册到容器中。
- SpringBoot的默认配置文件:src/main/rersources/application.properties
- Web 项目的默认客户端资源:
扫描的注解
:
- @Controller:web项目处理前端请求的控制器
- @Service :通常作用在业务层
- @Respository :用于数据的访问层(DAO层)如果引入Mybatis数据访问层,不使用此注解
- @Component:一个泛化的概念,仅仅表示一个组件(Bean),并且作用在任何层次。
- @Configuration 配置类
- @Bean 编码方式定义bean对象
Spring MVC的使用
Spring MVC 的流程:
Spring MVC 的统一异常处理:
AOP
Aop(面向切面编程)和oop面向对象都是一种编程模式的框架,能有效的减少系统间的重复代码达到模块间的松耦合的目的
。
AOP的全称(Aspect Oriented Programming)它将业务的逻辑各个部分进行隔离
,使开发人员可以专心于核心模块,从而提高业务的开发效率。
业务代码与处理异常代码分割开,高内聚,低耦合
1.AOP的原理是什么?实现的方式有哪些?每个方式里面是用了那些关键的api,或者实现的部分细节。
Spring框架中AOP是怎么实现的?
实现方式:
(1)JDK的实现方式:
前提条件,要求被代理类实现一个接口,
面试回答:通过invocationHandler
生成代理,通过Proxy.newInstance()
生成代理类,具体干事情的是代理类,而不是被代理类
实现原理:jdk是通过字节码动态生成的代理类。
(2)cglib的实现方式:
不需要实现接口,Methodinterceptor拦截某个方法。
此上两种实现方式是Spring aop的实现方式。被称为动态代理
。
(3)Aspect j的方式:可以匹配包,类,方法最后定位到需要拦截的方法,之后在方法调用前后加入自己的逻辑。
AOP的使用场景
:
- 统计方法的执行时间
- 统一异常处理
- 统一数据格式的封装
- 记录日志
- 统一事务处理…
Freemarker(动态网页技术)
动态网页还有JSP:pop出一个面试题:jsp和servlet的区别?
个人从实际体验中发现,静态html文件只能使用get方法请求。使用post会出现405:method not allowed
首先静态网页输入url会发生什么?
什么是FreeMarker?
FreeMarker是一个模板引擎。
之前我们使用servlet,可以根据请求动态计算得到响应数据,然后根据响应数据拼装成HTML,而手动按照字符串方式拼装HTML是一件非常痛苦的事情,freeMarker就是解决这个问题。
案例使用: