springAOP杂谈
spring-aop包 它是以spring-beans 这个包作为依赖的,
因为IOC容器(定位、加载、注册、初始化、注入)中存放的就是Factory Bean
AOP工厂生产出来的Bean是可以放入到IOC容器中去的。
先等我们IOC容器启动以后,进行二次操作
AOP不要执行上面的那些创建对象的操作了。只要能够拿到IOC容器的引用,直接从IOC容器中取出需要被二次操作的所有的对象。
IOC里面已经是代理类了(除了原型)
那么AOP中,对代理类的二次操作(深操作),每个动作都要被管控。
代理主要有两种,一种是JDK代理,一种是Cglib
如果有实现接口(InvocationHandler),默认用jdk代理。
切点,转换为MethodInterceptor,保存到一个容器里面,这个容器一定是一个链表结构,一定是有顺序的,它知道它的上一个是谁,它的下一个是谁,
AOP为什么能用来做权限控制,得益于这种拦截器链表的设计。
AOP
1、加载配置信息,解析成AopConfig
2、交给AopProxyFactory,调用一个createAopProxy的方法,这个方法里面调用一个JdkDynamicAopPorxy调用AdvisedSupport的getInterceptorsAndDynamicInterceptionAdvice方法得到方法拦截链,并保存到一个MethodInterceptor容器(这个容器是个List,IOC容器是Map)。递归执行拦截器方法proceed()方法。
最终就是由一个Adviesor来调用切面中的方法。
SpringJDBC框架
springJDBC本身就是基于模板模式来开发的。
事物分两类:只读事务和有增删改操作的事务。
1、加载驱动类(基于Mysql)
2、获取连接(被封装到DataSource里面去了)
3、创建语句集(预处理语句集和标准语句集)
4、执行语句集(执行事务操作)
5、获取结果集(如果是增删改,拿到一个int值,影响行数;如果是查询,就会拿到一个Resultset)
MyBatis是一个半自动的ORM框架(配合了mapping xml文件)
Hibernate是一个全自动ORM框架
springJDBC是一个手动的ORM框架
SpringJDBC采用的是Template设计模式,只定义了一个RowMapper的接口,mapping方法是没有实现的,这个方法的作用是用来做ORM(Object Relaction Mapping)的,ORM由自己实现。
SpringJDBC实现多对多,一对多,一对一,也是手写SQL去实现。
jdbc框架,主要是为了不写sql,由程序自动生成。
手写JDBC框架、做两件事
1、实现单表操作实现NoSQL
2、把手动ORM变成自动ORM
SpringJDBC是依赖于Spring,而spring是一个万能胶。
Spring支持JDBC,Dao层解决了
Spring支持AOP,多模块开发解耦的问题解决了
Spring支持MVC,页面交互的问题也解决了。
JDBC代替了Hibernate、Mybatis
MVC代替了Struts、WebWork