1.AOP面向切面编程
主要用于日志记录,性能统计,事务处理,异常处理,将代码从业务逻辑中分离出来,将其独立到非业务逻辑的方法中,进而改变这些行为时不影响业务逻辑的代码。(动态代理)(预编译)
切点:匹配连接点的断言,在AOP中通知和一个切入点表达式关联
2.DI依赖注入
在面向对象,面向对象过程中,如果A包含对象B,则需要在A里new一个B,而依赖注入从具体类B里抽象出接口,A直接跟IOC容器说,我要一个IB(getBean("IB")),由容器配置文件来做具体的New工作。
3.控制反转
控制:指谁来控制对象的创建,普通应用程序是程序本身创建对象的,使用Spring后,是由spring容器来创建
反转:原来是程序主动创建对象,而现在则是被动接受参数(权限转移)
4.静态代理
- 真实角色
- 代理角色(持有真实角色的引用)
- 共同实现的接口
5.静态代理和动态代理的异同
- 角色相同,真实角色,代理角色相同
- 动态代理类是动态生成的
- 动态代理:
基于接口的动态代理-JDK interface InvocationHandler
基于类的动态代理-cglib
基于spring,mybatis中的JAVAssit来生成动态代理
interface InvocationHandler -> Object invoke(Object obj,Method method,Object[] orgs) 代理类,动态代理的方法
6.动态代理的JDK实现
- 实现InvocationHandler接口
- 重写invoke方法
- 通过jdk提供的代理类的Proxy的静态方法中的newProxyInstance()构建代理类的实例
7.常用注解及含义
-
@Autowired注解用于传统的setter方法,基于注解的自动装配(byName,byType,constnctor)
-
@Qualifier指定某接口的实现类
-
@Resouse指定资源
-
@Component加载bean
-
@Scope指定Bean的作用域
-
@PostConstruct:在构造器初始化后调用
-
@PreDestory:在ClassPathXMLApplicationContext销毁前调用
8.事务的传播行为
9.事务的隔离级别
10.脏读 幻读 不可重复读
- 脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
- 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
- 幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样
- 不可重复读的重点是修改:
同样的条件,你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除:
同样的条件,第 1 次和第 2 次读出来的记录数不一样 - 不可重复读和脏读的区别:脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是在同一事务内读取了前一事务提交的数据,即前一次读到的数据是另一个事务提交前,后一次读到的数据是提交后的。