美文网首页
Spring源码学习笔记

Spring源码学习笔记

作者: 奋斗的小鸟GO | 来源:发表于2019-02-21 11:19 被阅读0次

Spring为了简化Java开发,采取了4个关键策略:
1、基于POJO的轻量级和最小侵入性编程
2、通过依赖注入和面向接口松耦合
3、基于切面和惯性进行声明式编程
4、通过切面和模板减少样板式开发
主要通过面向bean、依赖注入和面向切面这三种方式来实现


1、常用的设计模式:

1.1 代理模式:JDK动态代理、CGLib动态代理
1.2 工厂模式:简单工厂、工厂方法、抽象工厂
Spring Bean的创建是典型的工厂模式,通过学习源码,BeanFactory作为最顶层的一个接口类,
有三个实现类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory,
但它们最终的默认实现类为DefaultListableBeanFactory,它实现了所有接口。

public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";

    Object getBean(String var1) throws BeansException;

    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    <T> T getBean(Class<T> var1) throws BeansException;

    Object getBean(String var1, Object... var2) throws BeansException;

    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;

    boolean containsBean(String var1);

    boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;

    boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;

    Class<?> getType(String var1) throws NoSuchBeanDefinitionException;

    String[] getAliases(String var1);
}

1.3 单例模式
单例模式思想:保证类在内存中只有一个对象。
注意:实现一个单例有两点注意事项:
A 将构造器私有,不允许外界通过构造器创建对象;
B 通过公开的静态方法向外界返回类的唯一实例。
代码体现,五种实现方式:
饿汉式

public class Singleton() {
     private static Singleton instance = new Singleton();
     private Singleton() {}
     public static Singleton getInstance() {
          return instance;
     }
}

懒汉式(延迟加载和多线程)

public class Singleton() {
     private static Singleton instance = null;
     private Singleton(){}
     public static synchronized Singleton getInstance() {
          if(singleTon == null) {
               instance = new Singleton();
          }
          return instance;
     }
}

双重校验锁 volatile的一个语义是禁止指令重排序优化,也就保证了instance变量被赋值的时候对象已经是初始化过的

public class Singleton { 
     private static volatile Singleton instance = null; 
     private Singleton(){} 
     public static Singleton getInstance() { 
          if (instance == null) { 
               synchronized (Singleton.class) { 
                    if (instance == null) {
                         instance = new Singleton(); 
                    } 
               } 
          } 
          return instance; 
     } 
} 

静态内部类

public class Singleton{ 
     private static class SingletonHolder{ 
         public static Singleton instance = new Singleton(); 
     } 
     private Singleton(){} 
     public static Singleton newInstance(){ 
         return SingletonHolder.instance; 
     } 
} 

枚举

public enum Singleton{ 
    instance; 
    public void whateverMethod(){}     
}

1.4 委派模式
1.5 策略模式
1.6 原型模式
1.7 模板模式

相关文章

网友评论

      本文标题:Spring源码学习笔记

      本文链接:https://www.haomeiwen.com/subject/zbqryqtx.html