ioc

Spring 核心 IOC跟 AOP的自我实现

自作多情 提交于 2020-02-26 00:43:24
文章目录 Spring 1、Core Container(核心容器) 2、Data Access 3、Web 4、AOP 5、Test Spring 版本与 Java 版本的对应关系 IoC 1、XML 解析: 2、根据第 1 步获取的信息,动态创建对象 spring-ioc.xml文件如下 User类 Spring 提供点解析API 官方 ApplicationContext 接口查看 巧重点:根据官方ApplicationContext实现 MyClassPathXmlApplictionContext AOP 简单ADD方法 Spring 官方AOP注解实现 spring-aop.xml 调用官方AOP 巧重点:自我实现AOP 万马奔腾 参考 Spring Spring make java more simple Spring make java more modern Spring make java more reactive Spring make java more productive Spring make java more cloud-ready 简而言之Spring是Java目前 第一大框架 ,Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而

看完这篇你还敢说,不懂Spring中的IoC容器?

ぐ巨炮叔叔 提交于 2020-02-25 19:00:01
一. 什么是IoC 什么是耦合和内聚 耦合指的就是模块之间的依赖关系。模块间的依赖越多,则表示耦合度越高,相应的维护成本就越高。 内聚指的是模块内功能之间的联系。模块内功能的联系越紧密,则表示内聚度越高,模块的职责也就越单一。 所以在程序开发中应该尽量的降低耦合,提高内聚。也就是设计原则中的开闭原则和单一职责原则。 工厂模式 工厂模式就是用来解决程序间耦合的一种设计模式。可以把所有要创建的对象放在工厂的一个集合里,当需要使用这个对象的时候,直接从工厂里面取出来用就行。 工厂模式的优点: 一个调用者想创建一个对象,只需要指定相应的名字即可从工厂中获得这个对象。 屏蔽了产品的具体实现,调用者只关心产品的接口。 控制反转(IoC) 控制反转在维基百科中的定义: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递(注入)给它。 下面再从控制和反转两个词分两个方面来理解: 谁控制谁?IoC容器控制了对象。控制什么?控制了对象要获取的外部资源(其它对象或数据等)

spring控制反转(IOC)

最后都变了- 提交于 2020-02-25 10:38:16
一、IOC的基础知识以及原理 背景:在采用面向对象方法设计的软件系统中,底层实现都是有N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。即软件系统中对象之间的耦合,对象A和对象B之间有关联,对象B又和对象C有依赖关系,这样对象和对象之间有着复杂的依赖关系,所有才有了控制反转这个理论。 什么是控制反转(IOC)? IOC是Inversion of Control的缩写,有的翻译成控制反转,还有翻译成为控制反向或者控制倒置。 简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现是对外部来说是透明的,从而降低了解决问题的复杂度,从而可以灵活地被重要和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖对象之间的解耦,如下图所示: 即把各个对象类封装之后,通过IOC容器来关联这些对象类。这样对象与对象直接就通过IOC容器进行联系,但对象与对象之间没有什么直接联系。 如果去掉IOC容器后系统中的对象A与对象B就有了直接联系,如右图所示 比如好多的对象类要关联起来的话,就会变得很复杂,如右图所示: 所以提出IOC控制反转还是很有必要的。 为什么要把这种方式叫做控制反转呢? 软件系统在没有引入IOC容器之前,对象A依赖对象B,那么A对象在实例化或者运行到某一点的时候,自己必须主动创建对象B或者使用已经创建好的对象B

Ioc容器Autofac系列(1)-- 初窥

爷,独闯天下 提交于 2020-02-23 14:42:35
前言 第一次接触Autofac是因为CMS系统-- Orchard ,后来在一个开源爬虫系统-- NCrawler 中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器。那么,Ioc容器是用来做什么的?用了有什么好处?我相信如果不明白这两点就很难敞开心扉接受Ioc容器。 传统解耦设计的弊端 为方便描述,举个日志的栗子。我简化实现,一个 Log 类,一个 SaveLog 方法。如果其他类想拥有记日志功能,那么只需在内部包含一个 Log 类型的变量: public class Log { public void SaveLog( string message) { // save log here. } } public class ProductService { private Log _log; public ProductService() { _log = new Log (); } public void SaveProduct() { // save product here. //... _log.SaveLog( "save 1 product" ); } } 有经验的程序员可能会告诉你,这样做会导致其他类与 Log 耦合。于是,为了解耦,我们将 Log 类的功能抽象出来, ILog 接口就产生了。如此一来,当其他类需要日志功能时,内含变量就从

web.xml可以配置哪些内容

微笑、不失礼 提交于 2020-02-22 11:01:35
web.xm用于配置Web应用的相关信息 如: 监听器(listener)[ @WebListener ] 、过滤器(filter)[ @WebFilter ]、Servlet [ @WebServlet ]、相关参数、会话超时时间、安全验证方式、错误页面等 配置Spring上下文加载监听器加载Spring配置文件并创建IoC容器 < context-param > < param-name > contextConfigLocation </ param-name > < param-value > classpath:applicationContext.xml </ param-value > </ context-param > < listener > < listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class > </ listener > 配置Spring的OpenSessionInView过滤器来解决延迟加载和Hibernate会话关闭的矛盾 < filter > < filter-name > openSessonInView </ filter-name > < filter-class > org.springframework.orm

Spring ApplicationContext.xml配置的12个技巧

浪尽此生 提交于 2020-02-22 08:22:44
转自 http://www.blogjava.net/103335460/articles/260845.html Spring是一个强有力的java程序框架,其被广泛应用于java的程序中。它用POJO提供了企业级服务。 Spring利用依赖注入可以获得简单而有效的测试能力。Spring beans,依赖关系,以及服务所需要的bean都将在配置文件中予以描述,配置文件一般采用XML格式。然而XML配置文件冗长而不易使用,在你进行一 个使用了大量bean的大项目中它将变得难以阅读和控制。 在这篇文章中我将给你展示12种的有关Spring XML配置文件的最佳技巧。它们中的一些具有更多的实际意义,而不仅是最好的技巧。请注意另外一些因素,例如域模型的设计,会影响到XML配置,但是这篇文章更关注于XML配置的可读性和可操控性。 1. 避免使用自动装配 Spring 可以通过bean类的自省来实现自动装配依赖,这样的话你就不必明确地描述bean的属性或者构造函数的参数。根据属性名称活匹配类型,bean属性可以 自动进行装配。而构造函数可以根据匹配类型自动装配。你甚至可以设置自动装配进行自动侦测,这样Spring替你就会选择一个合适的机制。请看下面的例 子: Spring 可以通过bean类的自省来实现自动装配依赖,这样的话你就不必明确地描述bean的属性或者构造函数的参数

SSM框架归纳学习Spring篇

怎甘沉沦 提交于 2020-02-22 06:58:46
Spring是什么? Spring是一个分层,轻量级兼容性高的一站式(一条龙服务)开源框架。 分层:表现层SpringMVC,业务逻辑层(Dao层)管理事务、记录日志,持久层(数据访问 层)MyBatis。 轻量级: 高内聚低耦合 低耦合· 对象得 创建 和依赖关系的 维护 都交给Spring容器管 理。(IOC控制反转) 兼容性高:面向切面开发(AOP)。 Spring的核心 IOC控制反转 IOC是什么? IOC是一种理论:借助于“第三方容器”实现具有依赖关系的对象之间的解耦( IOC是一种理论思想 ,它的存在形式是第三方容器,被 命名为IOC容器 ) IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第 三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系 统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发 挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。 为什么叫IOC控制反转? 软件系统在没有引入IOC容器之前,如图所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B, 控制权都在 A 手上 。 软件系统在引入IOC容器之后

借鉴 spring 面试内容

风流意气都作罢 提交于 2020-02-21 16:40:29
1. Spring的IOC有三种注入方式 : 第一是根据属性注入,也叫set方法注入; 第二种是根据构造方法进行注入; 第三种是根据注解进行注入 Spring的优点 :主要是根据它的IOC和AOP体现的。IOC主要是解决了代码的耦合性问题,而AOP是面向切面编程的最好解释! 2.Spring中IOC, AOP IOC就是控制翻转或是依赖注入。通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过Spring的bean工厂为你长生这样一个对象。 AOP就是面向切面的编程。比如说你每做一次对数据库操作,都要生成一句日志。如果,你对数据库的操作有很多类, 那你每一类中都要写关于日志的方法。但是如果你用AOP,那么你可以写一个方法,在这个方法中有关于数据库操作的方法, 3.Spring的IOC/AOP/代理 IOC是控制反转,是Spring的核心思想。通过面向接口编程来实现对业务组件的动态依赖。 aop是面向切面编程,它并不是只在Spring或者java中才有的,它和面向对象编程(oop)是相对而言的另一种编程思想。 Spring在实现AOP编程时利用的是java的代理机制。个人觉得java代理机制真的是很神奇。核心内容并不多 4.Spring的IOC是解耦,AOP是干什么的 AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务等)

PHP实现IOC依赖注入

老子叫甜甜 提交于 2020-02-19 10:52:19
<?php class A { public function doAction($a) { echo __CLASS__ . ":" . 'hello' . "\n"; var_dump($a); } } class B { private $a; public function __construct(A $group) { $this->a = $group; } public function doAction($a) { $this->a->doAction($a); echo __CLASS__ . ":" . 'hello' . "\n"; } } class C { private $b; public function __construct(B $department) { $this->b = $department; } public function doAction($a) { $this->b->doAction($a); echo __CLASS__ . ":" . 'hello' . "\n"; } } class Container { private $instances = array(); public function bind($name, $class) { $this->instances[$name] = $class; }

spring ioc 源码解析

∥☆過路亽.° 提交于 2020-02-18 15:25:09
Spring IOC的初始化流程 1、项目从 ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”); 2、找到工厂实现类【ClassPathXmlApplicationContext】中对应的构造方法,执行ioc容器初始化: 如下: *使用给定的父类创建一个新的ClassPathXmlApplicationContext, 从给定的XML文件中加载定义。 * @param configLocations资源位置数组 是否自动刷新上下文, 加载所有bean定义并创建所有的单例。 *或者,在进一步配置上下文之后手动调用refresh。 * @param父上下文 如果上下文创建失败,@抛出BeansException * @see # refresh () <ignore_js_op> 3、找到工厂抽象父类【AbstractApplicationContext】中的【refresh】方法: 3.1.该方法实现解析xml配置文件内容,封装成BeanDefinition对象,注册到BeanFactory中 3.2.该方法实现一些基础组件的注册:bean后置处理器组件、监听器组件、国际化资源组件 3.3.该方法实现bean对象的真正实例化。细节:初始化全部【singleton