Spring
Spring中的两大核心?
相当于把每个bean与bean之间的关系交给第 三方容器进行管理.
1、IOC(Inversion of Control )或DI(Dependency Injection)
IOC控制权反转(转移)
原来:我的Service需要调用DAO,Service就需要创建DAO
Spring:Spring发现你Service依赖于dao,就给你注入.
核心原理:就是配置文件+[反射](工厂也可以)+容器(map)
2、AOP:面向切面编程
核心原理:使用动态代理的设计模式在执行方法前后或出现异常做加入相关逻辑。
我们主要使用AOP来做:
1、事务处理
2、权限判断
3、日志
4、....
Spring中Bean的⽣命周期?
[1]通过构造器或工厂方法创建bean实例
[2]为bean的属性设置值和对其他bean的引用
[3]调用bean的初始化方法
[4]bean可以使用了
[5]当容器关闭时,调用bean的销毁方法
Spring框架五种不同的作用域?
- singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。
- prototype:一个bean可以定义多个实例。
- request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。
- session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境。
- globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境。
bean默认的scope属性是"singleton"。
spring的依赖注⼊有哪⼏种⽅式?
在Spring容器中为⼀个bean配置依赖注⼊有四种⽅式:
- 使⽤属性的setter⽅法注⼊ 这是最常⽤的⽅式;
- 使⽤构造器注⼊;
- 使⽤Filed注⼊(⽤于注解⽅式).
- 静态、实例⼯⼚的⽅法注⼊
Spring的底层实现机制是什么?
使用Demo4j(解析XML)+Java反射机制
Demo4j 其实就是解析XML。使用反射机制实例化bean。
SpringAOP用到了什么代理?
JDK动态代理:对实现了接口的类生成代理
CGLib代理机制:对类生成代理
动态代理与静态代理区别?
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
Spring有哪些注解?
@Autowired(按类型注入)
@Service(标示为注入为服务层)
@Resource(按名称注入)
@Controller(标识控制器bean id)
@RequestMapping(表示映射URL路径)
Spring注入的过程
Autowired(按类型注入)
Resource(按名称注入)
这两个注解做了什么?为什么能够注入这个Bean?
Spring事务7传播属性5隔离级别?
- ISOLATION(隔离)_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
另外四个与JDBC的隔离级别相对应
1、幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
2、不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
3、脏读:事务1更新了记录,但没有提交,事务2读取了更新后的⾏,然后事务T1回滚,现在T2读取⽆效。
Spring中BeanFactory和FactoryBean有什么区别?
a. BeanFactory,以Factory结尾,表示它是⼀个⼯⼚类(接⼝),⽤于管理Bean的⼀个⼯⼚。在Spring中,BeanFactory是
IOC容器的核⼼接⼝,它的职责包括:实例化、定位、配置应⽤程序中的对象及建⽴这些对象间的依赖。
b. FactoryBean以Bean结尾,表示它是⼀个Bean,不同于普通Bean的是:它是实现了FactoryBean接⼝的Bean,[根据该
Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,⽽不是FactoryBean本身],如果要获
取FactoryBean对象,请在id前⾯加⼀个&符号来获取。
BeanFactory和ApplicationContext有什么区别?
相同点:两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。
不同点:BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext。
Spring Context初始化流程
AOP开发:
- 导⼊aop依赖包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
-
创建切⾯类:
-
将切⾯类和⽬标类都加⼊到容器中,并开启基于注解的aop动态代理
-
测试:
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAOP
MathCalculator calculator = applicationContext.getBean(MathCalculator.class);
calculator.div(1, 0);
SpringMVC的执行流程
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
ORM?
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
(mybatis)与Hibernate有什么不同?
iybatis:提供了将结果集自动封装称为实体对象和对象的集合的功能.ibatis可以出来复杂语句,而hibernate不能。
Hibername的好处:Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,并执行并返回java结果。