深入理解spring

一 IOC容器概述

ioc类型:构造注入 属性注入 接口注入

类装载步骤:装载 验证  准备  解析  初始化 使用 卸载

classLoader:根加载器(bootstrap)  扩展加载器(ext)  系统加载器(app) 采用全盘负责委托机制

反射:可以从class对象获取构造函数 成员变量 方法三个主要反射类 

资源访问利器Resource:FileSystemResource  ClassPathResource ServletContextResource

BeanFactory ApplicationContext:beanFactory为ioc容器 spring框架的基础设施 面向spring,常用XmlBeanFactory ,applicationContext为应用上下文,面向开发者,主要实现类有classpathXmlApplicationContext  fileSystemXmlApplicationContext,区别:beanFactory 在第一次调用才初始化,而applicationContext是在容器启动初始化上下文即初始化bean

WebapplicationContext:两种初始化方法 org.springframework.web.context.ContextLoaderListener和org.springframework.web.context.ContextLoaderServlet

Bean生命周期:获取bean 初始化 设置属性 卸载

二 IOC中装配Bean

变量前两个字母要么全部大写,要么全部小写,eg:isBatch IDCard

依赖注入:属性注入、构造注入、工厂方法注入

Bean间关系:继承(parent),依赖(depends-on),引用(idref)

Bean的作用域:singleton prototype request session globalSession

基于注解启动spring容器:ApplicationContext ct = new AnnotationConfigApplicationContext(); ct.registe(Config.class); ct.refresh();

三 Spring高级

Bean创建过程:

    1.ResourceLoader 加载配置文件,生成对应的Resource

    2.BeanDefinitionReader读取并解析resource,生成对应的BeanDefinition,并注册到BeanDefinitionRegister中,

    3.spring扫描BeanDefinitionRegister读取BeanDeifnition,如果bean实现工厂后处理器(BeanFactoryPostProcessor),对beanDefinition进行处理

    4.使用InstantiationStrategy初始化Bean,相当于new

    5.使用BeanWarpper对bean进行封装,完成bean属性设置工作

    6.利用容器中注册的bean后处理器(实现BeanPostProcessor接口),对bean进行后续加工

使用外部文件:使用<context:property-placeholder location=""/> 注file-encoding="utf8",使用${属性名}引用属性值

加密外部文件:1.继承PropertyPlaceholderConfigurer 重写convertProperty(String propertyName,String propertyValue)方法,2.通过传统配置方式引入配置文件 <bean class="" p:location=""/>

国际化信息

本地化格式工具:DateFormat  NumberFormat  MessageFormat MessageSource

四 Spring Aop

基础知识:

    jdk动态代理:1.实现InvocationHandler 在invoke方法定义横切逻辑,通过反射调用目标类方法

                           2.通过Proxy.newProxyInstance() 为目标对象创建代理

    cglib动态代理:采用底层字节码技术,为类创建子类,在子类拦截所有调用父类方法的调用,性能优于jdk代理

                            1.实现MethodInteceptor 在inteceptor方法定义横切逻辑

                            2.通过字节码创建子类代理类

增强类型:前置 后置 异常 最终 环绕 引介,引介:为目标类创建新的方法或实现,类级别

五 基于@AspectJ和Schema的spring aop

注解:

通配符:* 匹配任意字符 只能匹配上下文的一个元素

                .. 匹配任意字符 匹配多个元素 

                + 表示类型匹配的所有类 包括子类

切点函数:@annotation(注解) 表示标识注解的所有方法

                    @execution(* com.baobaotao.Waiter+.*(..)) 表示匹配Waiter 及子类的所有方法,第一个*表示返回类型

                    args() 针对方法签名的 入参接受指定的类

                    @args() 入参接受指定注解

                    within() 同execetion()

                    target(M) 目标类匹配M

    @AspectJ进阶:命名切点,切点可以作为类似变量定义、引入

                            连接点对象,JoinPoint ProceedingJoinPoint(环绕增强) 

                            绑定连接点方法入参,通过args绑定

                            绑定代理对象,通过this

                            绑定类注解对象 通过within()或 target()

                            绑定返回值,通过returning

                            绑定抛出的异常,通过throwing

aop方式有四种:@AspectJ  <aop:aspect> Advisor <aop:advisor> 下面是对比

aop比较

六 Spring对Dao的支持

DBCP数据源:BasicDataSource

    initialSize 默认0 初始化连接数  

    maxActive  8  最大活动链接

    maxIdle 8 最大空闲链接

    ValidationQuery sql查询语句 mysql:select 1  oracle : select 1 from dual

    testOnBorrow true  是否从池中取出链接前检查

    testWhileIdle  false  空闲链接是否被回收

    testBetweenEvictionRunsMillis -1  空闲链接回收期运行周期

    推荐testOnBorrow false,testWhileIdle true  testBetweenEvictionRunsMillis一个合适值

C3P0数据源:ComboPooledDataSource 

    acquireIncrement 链接用完时 c3p0一次性创建的数目

    initailPoolSize 初始化创建的数目 

    minPoolSize 连接池最小连接数  反之maxPoolSize 

    maxIdleTime 0 最大空闲时间,超时被丢弃 0为永不丢弃

七 Spring事务管理

事务特性:原子性 一致性 隔离性 持久性

读未提交:会脏读 不可重复读 幻读

读已提交(READ COMMITED):会不可重复读(两次读取同一记录 结果不一样) 幻读

可重复读(REPEATALBE READ):会幻读(一个事务 第一次读取到10条记录 第二次读取11条记录)

序列化(SERIALIABLE):读加共享锁 写加排它锁

ThreadLocal   原理:ThreadLocalMap  方法set(T t)  get()  remove()  initialValue()

事务传播行为:REQUIRED 如果没有事务则新建,有事务则加入                

                REQUIRES_NEW 新建事务 如果当前有事务则将其挂起

                SUPPORTS 支持当前事务,如果没事务则以无事务运行

                NOT_SUPPROTED 以非事务方式执行 如果当前有事务则挂起

                NEVER 以非事务运行 如果当前有事务 则抛出异常

                NESTED 如果没有事务,就新建事务,如果有,嵌套当前事务

使用XML配置声明式事务 

基于注解配置声明式事务

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容