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;
 }
发布了87 篇原创文章 · 获赞 14 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/epitomizelu/article/details/104649960
今日推荐