spring杂谈(2)

AOP编程,由Factory执行动作,IOC容器,肯定用了抽象工厂模式,默认实现,spring-aop 他是以spring-beans这个包作为依赖的,因为IOC容器中存放的就是Factorybean
AOP工厂生产出来的bean是而言放入到IOC容器中去的
看源码最关键的是找到入口,也就是从Factory入手的,找到一个getBeab的方法
-w611
上面这个方法就是用来获取一个代理以后的bean,跟IOC体系的getBean异曲同工
定位 加载 注册 初始化 注入
依赖于IOC容器,先等IOC容器七点以后,进行二次操作
AOP不要执行上面的那些创建对象的操作
只要能够拿到IOC容器的引用。直接从IOC容器中取出需要被二次操作的所有对象
那么AOP中,对代理类的二次操作(深操作),每个动作都要被管控
beanDefinition
AOP最核心的东西就是代理:JDK代理,CGLIB代理
-w595
InvocationHandler:这个是JDK给我们提高的,做动态代理必须实现的接口
拦截器链,AOP给我们加上去的,主要是为环绕通知做准备
由切点进入切面。切点实际上就是method,通知的动作
切点,转换为MethodIntercor,保存到一个容器里面,这个容器一定是一个链表结构,一动室有顺序的,他知道他的上一个是谁,下一个是谁
AOP为什么能用来做权限,得益于这种拦截器链表的设计
链表结构操作是一种比较经典的方式
1、加载配置信息,解析成AopConfig
2、交给AopProxyFactory,调用一个createAopProxy的方法
3、JdkDynamicAopProxy调用AdviceSupport的getInstanceAdvice得到方法拦截器,并保存到容器中
IOC容器就是一个Map,AOP方法链就是一个List
递归执行拦截器方法proce()方法
MethodInterceptor容器是list
最终就是由一个Adviceor来调用切面中的方法

springJDBC框架 他封装了JDBC操作的一个框架,必须依赖spring
1、加载驱动类(基于MySQL)
2、获取连接(被封装到dataSource里去了)
3、创建语句集(预处理语句集合标准)
4.执行语句集
5、获取结果集(如果是增删改,拿到一个int值,影响数据行数,如果是查询,就会拿到一个resultSet)
Mybatis是一个半自动的ORM框架
Hibernate是一个全自动的ORM框架
SpringJDBC是一个手动的ORM框架
SpringJDBC采用的是Templete设计模式
只定义了一个RowMapper接口
mapping方法,这个方法是没有实现的,主要用来做ORM的,由自己实现
ORM:Object Relation Mapping
记录行:list,map,自定义class
Mybati半自动 mapping.xml文件,如果你的类结构跟数据库表接够完全一模一样,他就能帮你用发射极致自动匹配一个java对象
SpringJDBC实现多哦对多,一对多,一对一,也是手写sql去实现
JDBC框架,主要是为了不写SQL,由程序自动生成
手写JDBC框架,做2件事
1、单表操作实现NoSQL
2、把手动ORM编程自动ORM
3、SpringJDBC是依赖于spring,二spring十一个万能胶
springz支持了JDBC,Dao层解决了SpringAOP,多模块开发解耦的问题解决了
spring支持MVC,页面交互的问题也解决了
JDBC代替了Hibernate、MyBatis,MVC代替了Struts、webWork
Netty,Dubbo都支持spring
Hadoop、HBASE,Spark,Stom,spring都支持

//2009开发第一版本ibatis
//平稳运行了8年,没有出现大的事故
//如果一旦在业务中出现大的事故,一定要反馈给Tom老师


//兴趣,解决实际问题(适合自己的才是最好的)
//不约而同(感觉到一点,所谓框架不管怎么变,万变不离其宗)

//前端UI框架 BootStrap API非常乱
//开发EUI(使用像EasyUI一样简单,功能像Ext一样强大)

//SpringBoot 很简单,零配置
//基于SpringMVC进行了二次开发

//框架做了两件事
//1、自动生成SQL语句
//2、自动ORM映射

//Hibernate优点
//1、API丰富,可以实现无SQL操作(HQL),为了兼容所有数据库(都会先解释为HQL)
//再由HQL翻译成SQL(当然,有支持直接执行SQL的API,为了考虑用户需求复杂性)
//对所有数据库方言都支持得非常不错
//2、ORM全自动化

//MyBatis优点
//1、轻量级,性能好
//2、SQL和Java代码分离(SqlMap,把每一条SQL语句起一名字,作为Map的key保存)
//get("selectByName")

//自己的框架(择其善者而从之,开发出一个适合自己的框架)
//爱美之心,人皆有之
//找对象,一定是找个适合自己的(有时候需要去接受对方的缺点)

//第一,性能要好,是啥就是啥,不经过二次处理(不对SQL语句进行二次包装)
//第二,单表操作实现NoSQL(只要用JDBC,SQL是不能省,只不过这拼接SQL的过程不要用户自己写了
//由程序自动生成,最终生成的是一个字符串)
//QueryRule(顾名思义,查询规则),可以根据QueryRule来自动生成SQL语句
//第三,ORM零配置实现自动化(利用反射机制,把字段和属性对应上,然后,自动实例化返回结果)

//原则:约定优于配置(保证代码健壮性)
//DAO原则:一个Dao只操作一张表
//约定:做修改和删除的是根据主键来操作的
//约定:尽量使用单表操作,如果实在要多表操作,可以先把数据查出来放到内存,然后在内存中进行计算
//约定:支持读写分离
//约定:支持分库分表
//约定:ORM支持的类型原则上只认Java八大基本数据类型  + String(为了降低复杂度)
//对象状态:临时态、持久态、删除态、游离态

//Mapping 配置  OneToOne  OneToMany  ManyToMany
//简化,JdbcTemplate自己写去
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值