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 模板模式
网友评论