Spring第一阶段

一,为什么要用Spring?

     

    1, 方便解耦,简化开发

               Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。

               应用程序可以专注于业务实现,公共逻辑可以抽象为切面。

               将对象的实例化交给框架,通过依赖注入从容器中获取对象。

    2,方便集成各种优秀框架

              Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

              通过配置文件引入开源优秀框架。

     3,降低 Java EE API 的使用难度

              Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难

             度大大降低。

    4,方便程序的测试

            Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。

    5,AOP 编程的支持

            Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。

    6,声明式事务的支持

 

二,Spring三大组件

 

 

 

三大组件:Beans/Core/Context

 

三,三大基础概念

 

1,IOC 

     IOC即控制反转,所谓的控制反转就是开发者将对象创建、初始化的工作交给spring。

2,DI

    依赖注入,对象属性的自动注入。

3,AOP

    面向切面编程。

// 目标对象方法
public void insert() {
   insertToDatabase();
}



// 代理对象方法
public void insert() {
   log();
   authority();
   beginTransation();

   insert()

   log();
   commit();
}

四,三次分享计划

 

1,IOC

     手写简易IOC、DI框架,源码探索

2,AOP

    jdk动态代理原理、cglib动态代理原理、源码探索    

3,声明式事务

   

五,Spring的配置方式

1,纯XML配置

2,xml和注解

3,纯注解

 

六,IOC

 

1,手写IOC框架思路

      ①编写Spring格式的xml文件,定义bean;

      ②解析xml文件,加载bean配置到BeanDefinition缓存集合中;

      ③创建Bean对象,分为三步: 

              第一,实例化对象,相当于new一个对象;

              第二,初始化对象,设置属性值;   

              第三,将对象存入缓存中。 

 

2,三级缓存

/** Cache of singleton objects: bean name --> bean instance */

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);

/** Cache of singleton factories: bean name --> ObjectFactory */

private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);

/** Cache of early singleton objects: bean name --> bean instance */

private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);

        DI的不可逾越的山:循环依赖。

         

3,设计模式

     简单工厂

     策略设计模式           

ClassPathXmlApplicationContext.ClassPathXmlApplicationContext

     单例模式

             一文搞定单例模式

     装饰器模式

 

七,我的实践     

 

1,IOC

2,策略设计模式

3,泛型

4,注解

5,单例模式

 public SingleTonLazy getSingleTon() {
        if(null == singleTon) {
            singleTon = new SingleTonLazy();
        }
        return singleTon;
 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值