范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Spring框架中都用到了哪些设计模式?

  Spring控制反转IOC控制反转IOC: Inversion of Control 是一种解耦设计原则 主要目的是借助第三方,比如Spring IOC容器实现具有依赖关系的对象之间的解耦,从而降低代码之间的耦合度Spring IOC容器: Spring IOC容器负责创建对象并将对象连接在一起,配置这些对象.从创建中处理这些对象的整个生命周期,直到对象被完全销毁 Spring IOC容器类似一个工厂 在创建对象时,只需要配置好配置文件或者是注解即可,不需要关注对象是如何创建的控制反转示例: 对象a依赖于对象b, 当对象a需要使用对象b时必须由对象a创建对象b的实例 引入IOC容器后,当对象a需要使用对象b时,可以指定IOC容器去创建一个对象b注入到对象a中 引入IOC容器之后,对象a获取对象b的过程,由主动行为变为被动行为实现了IOC原则的设计模式: 服务定位器模式ServiceLocator 工厂模式Factory 抽象工厂模式AbstractFactory 模板方法模式TemplateMethod 策略模式Strategy 依赖注入Depedency Inject依赖注入DI依赖注入DI: Dependency Inject 将实例变量传入到一个对象中去 是实现控制反转的一种设计模式工厂设计模式FactorySpring框架中BeanFactory和ApplicationContext类使用工厂模式创建Bean对象BeanFactory延迟注入,即使用到某个Bean时才会进行注入和ApplicationContext相比会占用更少的内存,程序启动速度更快ApplicationContext容器启动时就创建所有的Bean和BeanFactory相比 ,BeanFactory仅提供了最基本的依赖注入支持 . ApplicationContext扩展了BeanFactory, 除了BeanFactory的功能外还包含其余更多的功能,通常使用ApplicationContext创建BeanApplicationContext的三个实现类: ClassPathXmlApplication: 将上下文文件作为类路径资源 FileSystemXmlApplication: 从文件系统中的XML文件中载入上下文定义信息 XmlWebApplicationContext: 从Web系统中的XML文件中载入上下文定义信息单例设计模式SingletonSpring中的Bean的作用域默认就是单例Singleton的 . Spring中的Bean还可以定义以下作用域: prototype: 每次请求都会创建一个新的Bean实例 request: 每一次HTTP请求都会创建一个新的Bean实例,该Bean实例仅在当前HTTP request中有效 session: 每一次HTTP请求都会创建一个新的Bean实例,该Bean实例仅在当前HTTP session中有效Spring实现单例Bean的方式: xml的方式:  复制代码 注解的方式: @Scope(value="singleton") 复制代码Spring底层通过ConcurrentHashMap实现单例注册表来实现单例模式:// 通过线程安全的concurrentHashMap实现单例注册表 private final Map singletonObjects = new ConcurrentHashMap(64);  public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { 	Assert.notNull(beanName, ""beanName" must not be null"); 	synchronized(this.singletonObjects) { 		// 检查缓存中是否存在实例 		Object singletonObject = this.singletonObjects.get(beanName); 		if (singletonObject == null) { 			... 			try { 				singleton = singletonFactory.getObject(); 			} 			... 			// 如果实例对象不存在,则将对象注册到单例注册表中 			addSingleton(beanName, singletonObject); 		} 		return (singletonObject != NULL_OBJECT ? singletonObject : null); 	} }  protected void addSingleton(String beanName, Object singletonObject) { 	synchronized(this.singletonObjects) { 		this.singletonObjects.put(beanName, (singletonObject != null ? singletonObject : NULL_OBJECT)); 	} } 复制代码代理设计模式ProxyAOP中的代理模式面向切面编程AOP: Aspect-Oriented Programming 面向切面编程能够将和业务无关,但是是业务模块中所共同调用的逻辑或者业务功能封装起来, 比如事务管理,日志管理,权限控制等 有利于减少重复代码,降低模块之间的耦合度,并有利于面向未来的可拓展性和可维护性 使用AOP可以将一些通用功能抽象出来,在需要使用的地方直接使用,这样可以大大简化代码量 需要增加新功能也会更加简单方便,这样可以提高系统的扩展性Spring AOP基于动态代理实现的: 代理对象实现了接口: Spring AOP会使用Java动态代理JDK Proxy创建代理对象 完成对象的代理操作 代理对象没有实现接口: Spring AOP会使用Cglib Proxy生成一个被代理对象的子类作为代理类完成对象的代理操作
  Spring AOP集成了AspectJ,AspectJ是Java中最为完整的AOP框架AspectJ和Spring AOP比较AspectJAspectJ是编译时增强AspectJ基于字节码操作Bytecode Manipluation实现AspectJ在切面较多的情况下要比Spring AOP的性能强很多Spring AOPSpring AOP是运行时增强Spring AOP基于代理Proxy实现Spring AOP中集成了AspectJSpring AOP比较简单,在切面比较少的情况下和AspectJ的性能相似模板方法模式TemplateMethod模板方法模式: 是一种行为型模式,基于继承的代码复用 定义一个操作的算法骨架,将一些实现步骤延迟到子类中 模板方法使得子类可以不改变一个算法结构的情况下即可重新定义算法的某些特定步骤的实现方式
  Spring中以Template结尾的类,比如jdbcTemplate等,都是使用了模板方法模式 通常情况下,都是使用继承来实现模板模式 在Spring中,使用了Callback与模板方法相结合的方式,既达到了代码复用的效果,又增加了系统的灵活性观察者模式Observer观察者模式: 是一种对象行为模式 表示的是一种对象和对象之间具有依赖关系,当一个对象发生改变,依赖于这个对象的对象也会发生改变Spring事件驱动模型就是基于观察者模式实现的 Spring事件驱动模型可以在很多应用场景中解耦代码 比如每次添加商品时都需要更新商品索引,这时就可以使用观察者模式Spring事件驱动模型Spring事件驱动模型包含三种角色: 事件Event角色 事件监听者Listener角色 事件发布者Publisher角色事件角色EventApplicationEvent: org.springframework.context 事件角色抽象类 继承java.util.Event并实现了java.io.Serializable接口Spring中默认存在以下事件,都是继承自ApplicationContext事件角色抽象类: ContextStartedEvent: ApplicationContext启动后触发的事件 ContextStoppedEvent: ApplicationContext停止后触发的事件 ContextRefreshedEvent: ApplicationContext初始化或者刷新后触发的事件 ContextClosedEvent: ApplicationContext关闭后触发的事件
  事件监听者角色ListenerApplicationListener: 事件监听者角色 ApplicationListener接口中定义了一个onApplicationEvent() 方法来处理ApplicationEvent. 只要实现onApplicationEvent() 方法即可完成监听事件@FunctionalInterface public interface ApplicationListener extends EventListener { 	void onApplicationEvent(E event); } 复制代码事件发布者角色PublisherApplicationEventPublisher: 事件发布者角色 ApplicationEventPublisher接口中定义了publishEvent() 方法来发布事件,这个方法在AbstractApplicationContext中实现 在AbstractApplicationContext中,事件是通过ApplicationEventMulticaster广播的@FunctionalInterface public interface ApplicationEventPublisher { 	default void publishEvent(ApplicationEvent event) { 		publishEvent((Object) event); 	}  	void publishEvent(Object event); } 复制代码Spring事件流程定义一个事件: 实现一个继承自ApplicationEvent的事件类,并写出相应的构造函数定义一个事件监听者: 实现ApplicationListener接口 重写onApplicationEvent() 方法使用事件发布者发布消息: 使用ApplicationEventPublisher的publishEvent() 方法 重写publishEvent() 方法发布消息Spring事件模型示例适配器模式Adapter适配器模式: 是结构型模式,也是各种结构型模式的起源 将一个接口转换为调用方需要的接口 适配器使得接口不兼容的类之间可以一起工作.适配器又被称为包装器WrapperSpring AOP中的适配器模式Spring AOP中的增强和通知Advice使用了适配器模式,接口是AdvisorAdapter常用的Advice类型包括: BeforeAdvice: 前置通知. 目标方法调用前增强 AfterAdvice: 后置通知. 目标方法调用后增强 AfterReturningAdvice: 目标方法执行结束之后 ,return之前每个通知Advice都有对应的拦截器: BeforeAdvice - MethodBeforeAdviceInterceptor AfterAdvice - MethodAfterAdviceInterceptor AfterReturningAdvice - MethodAfterReturningAdviceInterceptorSpring中预定义的通知要通过对应的适配器,适配成为MethodInterceptor接口类型的对象Spring MVC中的适配器模式Spring MVC中 ,DispatchServlet根据请求信息调用HanlderMapping, 解析请求对应的Handler, 解析到对应的Handler后,开始由HandlerAdapter适配器进行处理HandlerAdapter作为期望接口,具体的适配器实现类对具体目标类进行适配 .controller作为需要适配的类通过使用适配器AdapterHandler可以对Spring MVC中众多类型的Controller通过不同的方法对请求进行处理装饰器模式Decorator装饰器模式: 动态地给对象添加一些额外的属性或者行为 和继承相比,装饰器模式更加灵活装饰器模式使用场景: 当需要修改原有的功能,但是不想直接修改原有的代码,就可以设计一个装饰器Decorator类在原有的代码的外面,这样可以在不修改原有的类的基础上扩展新的功能Spring中配置DataSource时 ,DataSource可以是不同的数据库和数据源.为了在少修改原有类的代码下动态切换不同的数据源,这时就用到了装饰器模式Spring中含有Wrapper和含有Decorator的类都用到了装时期模式,都是动态地给一个对象添加一些额外的属性或者功能总结Spring框架中使用的设计模式:
  设计模式
  Spring框架
  工厂模式
  BeanFactory
  ApplicationContext
  单例模式
  Spring中的Bean
  代理模式
  Spring AOP
  模板方法模式
  Spring中以Template结尾的类
  观察者模式
  Spring事件驱动模型
  适配器模式
  Spring AOP中的AdvisorAdapter
  Spring MVC中的HandlerAdapter
  装饰器模式
  Spring中含有Wrapper和含有Decorator的类

Ma优选在月子中心坐月子一般需要多少钱?在不少的亚洲国家,家里的长辈都会强调坐月子的重要性,月子坐的不好可能会落下一些疾病,并且很多疾病可能会伴随终身。对于产妇来说,产后的休息和休养的确是非常重要的,因为在十个月怀孕的过斐济邮政与斐济中国文化中心合作发行虎年生肖邮票来源中国新闻网斐济的工作人员展示虎年生肖邮票。韩小燕摄中新网北京2月15日电(记者潘旭临)记者从斐济中国文化中心获悉,斐济邮政与斐济中国文化中心于当地时间15日在斐济中国文化中心举公然挑事!华邮竟指责NBC转播北京冬奥时不深入探讨政治来源环球网奥运会本应与政治无关,但针对北京冬奥会,美国华盛顿邮报却声讨美国全国广播公司(NBC)体育部门在转播时不深入探讨政治问题。政治与体育分开,是再正常不过的事,荒唐的是,被针推倒重来!中超金元时代正式落幕,球迷建议这3人该离开足坛了众所周知,这两天的中超联赛格外热闹。昨天更是曝出了6条非常重磅的信息,其中最令人关注的就是广州与武汉两队率先公示球队将在,新赛季他们将对俱乐部球员进行大规模的降薪,并且态度非常坚决Netflix拍摄C罗女友纪录片IamGeorgina,普通店员的逆袭之路C罗女友由Gucci普通店员到享尽荣华富贵。住豪宅海量Herms袋私人飞机出入每月80万家用!她收服了情场C罗的浪子心。最近Netflix把C罗(CristianoRonaldo)175。75分!谢尔巴科娃绝美一战,裁判亮10个绿灯,甜美比心庆祝北京时间2月17日,北京冬奥会花样滑冰女子自由滑,俄奥队明星选手谢尔巴科娃倒数第二个登场,在她之前,队友特鲁索娃和日本名将坂本花织已经结束了自己的比赛,能否冲击金牌,还得看小千金自火了!这个外国代表团将中国元素穿上身,给了冬奥开幕式一个惊喜!时隔14年,来自奥林匹亚的火种再次跨越万水千山,在中国大地奏响冰与雪的协奏曲,来自五洲四海的人们也相聚北京,点燃冬奥冰雪运动的激情。2月13日,央视新闻频道东方时空栏目对参加北京冬大跳台背景的烟囱惹海外注目,日本网友循环利用真的不错冬奥会大跳台项目的背景大烟囱引来了不少人的关注。不仅是参赛的选手认为重工业与刺激的大跳台比赛的结合非常酷,更是有很多网友认为这种将废弃场地再利用的想法非常完美。暗淡工业风颜色艳丽的韩国队清空冬奥食堂西瓜,遭日本选手投诉成笑柄,日本选手神助攻日前冬奥会食堂的西瓜被韩国队清空,遭日本选手投诉成笑柄的视频在网络上引起网友的关注和热议。事情是这样的,在我国举办的冬奥会比赛期间,为各国选手都安排了食宿,其中,韩国队选手抱怨我国相亲节目火了10年,全是托就算了,知道女嘉宾都是哪来的吗?最近这些年综艺节目真的越来越多,无论什么类型的综艺节目都层出不穷,而最近很多综艺节目中都有一个特点,那就是收视率特别高,而且口碑也非常不错,观众都特别喜欢这些节目。和现如今发展得特知名主持人跨界做网红,年收入破千万,虎哥火爆短视频的背后他是全网说车人闻风丧胆,他是说车人的标杆,是演员主持人还是说车界的大网红虎哥。他是短视频汽车领域的前辈月入百万,账号估值几个亿,凭借专业的汽车知识,以及铿锵有力的个人魅力,在短视频
荐读丨溜达的撵不上挑担的溜达的撵不上挑担的陈军老家有句俗语,溜达的撵不上挑担的。乍一听,感觉不合常理,空手走路的,怎么比挑担子的走得慢?但细一想,不无道理。现实中,那些双手揣在裤兜里,四处散步的人,并没有柴油自动挡房车省油省钱省心由于新冠疫情对旅游服务行业产生持续影响以及房车露营地配套设施的逐渐完善,以低密度旅游为特征的国内自驾游房车游备受追捧,房车自驾游成了不少人青睐的出游选择,那么第一辆房车应该怎么选择李娜被超越!中国网坛出现天才少女,郑钦文今晚有望一步登天2022年法国网球公开赛激战正酣,尽管多位中国选手早已提前出局,不过有一位此前名不见经传的小将却不断给国人带来惊喜,她就是19岁的小花郑钦文。在本届法网比赛中,郑钦文一路过关斩将已5000mAh视频双防抖,跌至1089元,四摄手机618沦为标准千元机短视频行业的快速发展带来了很多的变化,其中就包括使用手机录制视频的人变多了,以前人们使用手机摄像头更多是拍照,很少使用录像功能,但是如今使用手机摄像头进行录像的频率反而更高了,不过特写92号汽油都9元了,你还会选择燃油车吗?文懂车帝原创邢秋鸿懂车帝原创行业5月30日24时,是一个见证历史的时刻。国内92号汽油平均价格首次触及9元大关。92号汽油全国平均价格将达到9元自2022年5月30日24时起,国内比汽车销量低迷更值得深思!平均每天11家4S店退网关停!4月份几乎腰斩的汽车销量,给了很多相关从业者当头一棒。虽然由于疫情的原因,多数人都做好了销量下跌的心理准备,但当这些数字真的公布出来,还是不免让人觉得忧心。不过随着疫情的好转以及疫RedmiK50手机12GB512GB版本今晚20点开售IT之家5月31日消息,近期,小米RedmiK50系列新增夏季新配色晴雪,采用雾面哑光白色后盖,将于6月18日0点正式开售,售价2399元起。此外,RedmiK50标准版新增12G警察荣誉张若昀及格跳脱警察,白鹿烈士子女受关照警察荣誉开播,好喜欢这种热闹的民警生活,我们看到的以前剧情大多是刑侦片,但我们生活中大多数是民警在身边,有小打小闹,有矛盾化解,更多的是鸡毛蒜皮,看着又是一部上榜的剧。四人新警实习回家继承家产的张迪和助理结婚,女方比他大5岁,争取明年生个娃对于喜欢看综艺的人来说,肯定都追过变形计,这是一档纪实类的真人秀,主要是想让在城市生活的主人公,与农村主人公互换了生活之后,感受不同的生活,改掉自己的臭脾气。张迪在家里是小霸王,谁给赌王擦背两月,差点当上五房,护士郑咏诗成千万富婆后嫁给了谁?赌王何鸿燊一生风流,有权有势,选女人的标准更是没得说,他曾表示我很挑剔,一生的情人不到10个,不是谁我都喜欢。所以能和赌王站一起的,不是选美冠军,就是影视明星,一水的倾世美人。但谁吴谨言传家中的人设不讨喜!但是在综艺节目中的表现很出圈延禧攻略是很多观众都喜欢的一部古装宫廷剧,曾经在播出的时候,也创下了不错的收视成绩和评分。吴谨言出演的魏璎珞,敢爱敢恨,心直口快,给观众留下了深刻的印象。本以来这部剧是她的开始,没