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、....
[1]通过构造器或工厂方法创建bean实例
[2]为bean的属性设置值和对其他bean的引用
[3]调用bean的初始化方法
[4]bean可以使用了
[5]当容器关闭时,调用bean的销毁方法
在Spring容器中为⼀个bean配置依赖注⼊有四种⽅式:
使用Demo4j(解析XML)+Java反射机制
Demo4j 其实就是解析XML。使用反射机制实例化bean。
JDK动态代理:对实现了接口的类生成代理
CGLib代理机制:对类生成代理
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
@Autowired(按类型注入)
@Service(标示为注入为服务层)
@Resource(按名称注入)
@Controller(标识控制器bean id)
@RequestMapping(表示映射URL路径)
Autowired(按类型注入)
Resource(按名称注入)
这两个注解做了什么?为什么能够注入这个Bean?
1、幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
2、不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
3、脏读:事务1更新了记录,但没有提交,事务2读取了更新后的⾏,然后事务T1回滚,现在T2读取⽆效。
a. BeanFactory,以Factory结尾,表示它是⼀个⼯⼚类(接⼝),⽤于管理Bean的⼀个⼯⼚。在Spring中,BeanFactory是
IOC容器的核⼼接⼝,它的职责包括:实例化、定位、配置应⽤程序中的对象及建⽴这些对象间的依赖。
b. FactoryBean以Bean结尾,表示它是⼀个Bean,不同于普通Bean的是:它是实现了FactoryBean接⼝的Bean,[根据该
Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,⽽不是FactoryBean本身],如果要获
取FactoryBean对象,请在id前⾯加⼀个&符号来获取。
相同点:两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。
不同点:BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext。
<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);
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
iybatis:提供了将结果集自动封装称为实体对象和对象的集合的功能.ibatis可以出来复杂语句,而hibernate不能。
Hibername的好处:Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,并执行并返回java结果。