1、工厂模式
BeanFactory是典型的工厂方法模式,其有多个实现,不同的实现有不同的getBean方法,默认实现是DefaultListalbeBeanFactory,我们也可以定义自己的工厂实现BeanFactory接口,重写里面的getBean方法
2、单例模式
在spring中有scope是singleton的bean,但是它不等于单例模式,singleton指的是容器中该对象的bean只有一个,和单例模式不是一回事,单例模式指的整个jvm只有一个实例对象。使用Mybatis时,其连接工厂SqlSessionFactory是单例模式,在spring中我暂时没找哪个对象是单例,后续进行补充。
3、观察者模式
spring中的时间event都采用的观察者模式
4、适配器模式
SpringMVC
5、代理模式
SpringAOP整个就采用的代理模式
6、模板方法模式
7、包装模式(装饰者模式)
在IOC容器中,反射创建了实例对象以后,会对其进行包装。参考org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#instantiateBean
/**
* Instantiate the given bean using its default constructor.
* @param beanName the name of the bean
* @param mbd the bean definition for the bean
* @return a BeanWrapper for the new instance
*/
protected BeanWrapper instantiateBean(final String beanName, final RootBeanDefinition mbd) {
try {
Object beanInstance;
final BeanFactory parent = this;
if (System.getSecurityManager() != null) {
beanInstance = AccessController.doPrivileged((PrivilegedAction<Object>) () ->
getInstantiationStrategy().instantiate(mbd, beanName, parent),
getAccessControlContext());
}
else {
beanInstance = getInstantiationStrategy().instantiate(mbd, beanName, parent);
}
BeanWrapper bw = new BeanWrapperImpl(beanInstance);
initBeanWrapper(bw);
return bw;
}
catch (Throwable ex) {
throw new BeanCreationException(
mbd.getResourceDescription(), beanName, "Instantiation of bean failed", ex);
}
}
8、原型模式
spring中prototype类型的bean采用的原型模式
9、策略模式
gpt回答
-
工厂模式(Factory Pattern):Spring中BeanFactory就是使用了工厂模式,通过BeanFactory可以获取到所需要的对象实例。
-
单例模式(Singleton Pattern):Spring中的Bean默认是单例的,即在容器中只有一个实例。
-
代理模式(Proxy Pattern):Spring AOP基于动态代理实现,通过代理模式实现了面向切面编程。
-
观察者模式(Observer Pattern):Spring中的事件驱动机制就是基于观察者模式实现的。
-
模板模式(Template Pattern):Spring中的JdbcTemplate和HibernateTemplate就是使用了模板模式,将模板代码和具体实现分开,提高了代码的复用性和可维护性。
-
适配器模式(Adapter Pattern):Spring中的适配器模式主要应用在MVC模块中,通过适配器将请求转发给对应的Controller处理。
-
策略模式(Strategy Pattern):Spring中的策略模式主要应用在事务管理模块中,通过定义不同的事务策略来实现不同的事务管理方式。
-
迭代器模式(Iterator Pattern):Spring中的迭代器模式主要应用在集合操作中,提供了统一的遍历方式,增加了代码的可读性和可维护性。
-
组合模式(Composite Pattern):Spring中的BeanFactory和ApplicationContext都是采用了组合模式,将多个对象组合成一个树形结构,提供了统一的访问方式。
-
模板方法模式(Template Method Pattern):Spring的JdbcTemplate和HibernateTemplate使用了模板方法模式,将通用的代码封装在父类中,子类只需要实现具体的业务逻辑。
-
工厂方法模式(Factory Method Pattern):Spring的BeanFactory和ApplicationContext使用了工厂方法模式,将对象的创建交给子类或者工厂类,提高了代码的灵活性和可扩展性。
-
装饰器模式(Decorator Pattern):Spring的BeanPostProcessor就是使用了装饰器模式,通过在对象创建后动态地增加一些功能,扩展了对象的功能性。
-
门面模式(Facade Pattern):Spring的Facade模式主要应用在Spring MVC中,将复杂的请求处理过程封装成一个简单的接口,提供了统一的访问方式。
-
状态模式(State Pattern):Spring的TransactionState就是使用了状态模式,通过定义不同的事务状态来控制事务的提交和回滚。
-
过滤器模式(Filter Pattern):Spring的FilterChain就是使用了过滤器模式,将多个过滤器组合成一个链,按照顺序依次处理请求。
总之,Spring框架使用了多种设计模式,这些设计模式不仅提高了代码的可读性和可维护性,还提高了代码的复用性和扩展性。