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

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的类

勇士队开始与安德鲁威金斯谈判据竞技报报道,金州勇士队已经开始与27岁的前锋安德鲁威金斯(AndrewWiggins)就新协议进行谈判。维金斯目前的合同将在下赛季结束时到期,这名球员将获得本赛季3360万美元的多位总经理讨论杜兰特与绿军交易流言若用塔图姆换杜兰特值得吗?福克斯体育记者RicBucher采访了联盟中的几位高管,询问了他们对凯尔特人与篮网关于凯文杜兰特交易的看法。一位东部球队总经理(涉及高管较多,下文中使用A代指)表示篮网应该要求马库NBA名宿比尔拉塞尔,在妻子身旁安详离世,享年88岁八月份的第一天就有不幸的消息,震惊全世界篮球圈,NBA最伟大的球员传奇巨星名宿,比尔拉塞尔安详离世享年88岁。比尔拉塞尔一生中非常传奇,他在1956年NBA选秀中,首轮第二顺位被老成功省下500万,艾顿却闹离队?太阳管理层有多蠢,这事真不地道俗话说做事情千万U币能因小失大,其实对于NBA球队来讲,动辄千万亿级别的美元生意更不会因为几万几百万而影响了整个球队,但偏偏有一些球队并不这样认为,比如说太阳队的管理层,大家都知道山西男篮遇到大麻烦,曝内线大将拒绝续约,或会加盟到上海男篮山西男篮的夏训开始比较早,球队也一直通过社交媒体发布一些训练的照片,让球迷能够及时了解球队的情况。当然,对很多山西球迷来说,目前最为关心的还是球员续约问题。据悉山西男篮前一段时间就赛斯库里在谈到本西蒙斯的投篮时直言不讳很多人都说本西蒙斯投篮能力差,球迷和专家都认为这是他最大的弱点,也是唯一阻碍他真正统治的因素。然而,据他在布鲁克林篮网队的队友塞斯库里说,这位澳大利亚控球前锋其实并不需要在他的武库WBC重新发布命令要求泽佩达普罗加斯争夺空缺140磅拳王头衔本周,WBC重新发布命令,要求该组织140磅超轻量级一号拳手何塞泽佩达,与三号拳手瑞吉斯普罗加斯进行谈判,双方争夺空缺的WBC拳王头衔。WBC要求泽佩达普罗加斯必须在8月30日之前文案适合八月发的热搜小句子1。花与夏天,是最美妙的人间。2。夏天里的美好,能治愈生命里的冬天。3。你像夏至的分界线,我一生最长的白天。4。热烈的夏天太短,每一秒都值得相爱。5。爱夏日的微风,傍晚的落日,以及适合8月发的朋友圈温柔句子朋友圈文案图且让八月滚烫的太阳,蒸腾掉七月的悲伤。八月,截取了一纸晴旸,执笔写下掺杂暑气的诗章。故事的开头是一瓶冰镇汽水,那是八月的味道和青涩的你。认真和七月道别,然后带着幸运去迎接温柔的八月最适合夏天吃的8种蔬菜,含钙量比牛奶都高,老少皆宜全家都喜欢下面给大家分享适合夏天吃的8种蔬菜,含钙量高,大人孩子都喜欢吃,喜欢的朋友,赶紧做起来吧!1芹菜推荐食谱芹菜炒肉食材芹菜瘦肉红椒生姜大蒜百合1西芹斜刀切成薄片,加入一勺白糖,一勺食穿裙子时,如何搭配鞋子?推荐这5双低跟鞋,显高还有女人味夏天想要把裙子穿的时髦又有范儿,除了要选对款式搭好配色,在鞋子的搭配上也绝对不能马虎,时髦女孩当然是要精致到每一个细节里。今年夏天流行用低跟鞋来搭配裙子,低跟鞋上脚具有更强的舒适感
沉浸式旅游项目真的是景区的救命稻草吗?随着市场消费需求的升级,游客越来越注重旅游的新鲜感体验感互动性,沉浸式旅游之风也刮向全国各个地方,沉浸式旅游项目旨在为旅游者创造全面的体验,即通过塑造感官及思维情感体验吸引消费者的互相甩锅,救不了智能汽车出品虎嗅汽车组作者张博文头图ICPhoto今儿智能汽车圈出了这么一事儿。一小鹏车主,开小鹏P7在国道上开启自动辅助驾驶十几公里后,突遇一辆侧翻在道路上的汽车,没有任何报警和减速,车OnStyle5。0加持,汽车机器人欧尚Z6全语音自动代客泊车亮点频出4月14日,欧尚汽车第六季超级测试员我的汽车机器人Z6智慧进化顺利完成。从2015年起,欧尚汽车便开始推出超级测试员活动,邀请用户亲临现场,见证欧尚汽车每款产品的极致实力。今年,新谷爱凌又被拍到在北京跑步!身边汽车三轮摩托车扎堆,注意安全北京时间4月16日,很多网友都晒出了谷爱凌的照片,原来谷爱凌又开始在马路边跑步了,不少网友也是感慨谷爱凌跑得太快,而且非常自律。谷爱凌的母亲谷燕依然骑自行车陪伴着女儿。在落脚点,很热搜第一!谷爱凌闪耀央视,演奏钢琴打扮靓丽,苏翊鸣弹吉他北京时间4月16日,央视冰雪之夜顺利进行,包括谷爱凌在内的多位中国冰雪健儿纷纷出场亮相。谷爱凌无疑是最大牌的明星,刚一出场便引发全场欢呼,掌声经久不衰。更让人没想到的是,谷爱凌平日LPL胜者组TESvsRNG第四场RNG永不言弃,让一追三恭喜RNG挺进决赛!!我滴个乖乖啊,有代GALA!!前期RNG天崩开局,不放弃,一波波顶住TES的进攻,等待GALA厄斐琉斯发育起来,烟火或许会迟到,但不会缺席!!都2022了,RNBA欧神仙超神篮网仍被绝杀篮网客场挑战凯尔特人,欧神仙超神发挥,砍下39分,杜兰特发挥不佳,全场24投9中,三分5中1,拿23分,6次失误,尼古拉斯赵四关键罚球两罚不中,杜兰特三分不中,塔图姆最后压哨绝杀,最有机会打进NBA的亚洲人!拥有超强天赋,曾凡博的旅美历程现如今,NBA球员国籍遍布全世界,而堂堂14亿人口的中国却挂零,这不禁让人唏嘘。当然,你可能会说,印度不也没有吗?但两国在篮球上的投入显然不是同一量级。上一个在NBA打球的中国人是幼儿园小班,幼小衔接数感培养,训练题每日一题,尽量固定孩子的学习时间,帮助孩子养成自主练习的学习习惯。指导方法家长帮助读题,鼓励孩子独立思考作答2作答完毕后,进入我当老师环节,鼓励孩子完整讲述这道题,比如提问孩子你是拿到手的苹果14真机,到底哪个最靠谱苹果14手机最近也是很多媒体单位,试机达人,NBA球星等一众人,说是已经拿到苹果14真机,也是在网络媒体上大肆炒作,弄的果粉一头雾水,要知道苹果14系列手机距离上市还有5个多月时间鹿晗为关晓彤添新纹身?看懂纹身含义,网友又一口狗粮鹿晗和关晓彤的感情稳定又甜蜜,自从上次两人一起穿同色系的婚纱礼服,在同一个地点拍摄写真时,就引起了不少粉丝的尖叫,在粉丝心里四舍五入相当于两人结婚了,而鹿晗和关晓彤暗戳戳的撒狗粮,