Spring2.0 学习笔记

Spring2 学习笔记 ??1. Spring 依赖注入(DI)和控制反转(Ioc)的理解:????2.Spring framework七个模块:????2.1. Spring Core????2.2. Spring Context????2.3. Spring DAO????2.4. Spring ROM????2.5. Spring AOP????2.6. Spring Web????2.7. Spring MVC??1. Spring 依赖注入(DI)和控制反转(Ioc)的理解:

??想要全面的了解spring 那么我们首先要了解是什么是依赖注入(DI)和控制反转(Ioc)。??

public class Worker { private Person person; public Worker(Person person) { this.person = person; }}

如上段代码,Worker依赖Person,Person通过Worker的构造函数注入到Worker类。这就是依赖注入。注入的方式还有setter注入和接口注入。 控制反转

public class Worker { private Person person; public Worker() { this.person = new Person(); }}

上段代码,worker 依赖 Person,底层依赖上层 ,传统应用的话使用worker需要自己newPerson对象。这两个类之间高耦合。有了依赖注入之后(把底层类作为参数传入上层类,实现上层类对对下层类的控制),用构造方法实现的依赖注入实现控制反转。

因为采用了依赖注入,在初始化的过程中就不可避免的会写大量的new。这里IoC容器就解决了这个问题。这个容器可以自动对你的代码进行初始化,你只需要维护一个Configuration(可以是xml可以是一段代码),而不用每次初始化一辆车都要亲手去写那一大段初始化的代码。这是引入IoC Container的第一个好处。

IoC Container的第二个好处是:我们在创建实例的时候不需要了解其中的细节。在上面的例子中,我们自己手动创建一个车instance时候,是从底层往上层new的:

创建 一个Worker实例——》new Person()——》注入new Worker()

这个过程中,我们需要了解整个Worker/Person类构造函数是怎么定义的,才能一步一步new/注入。

而IoC Container在进行这个工作的时候是反过来的,它先从最上层开始往下找依赖关系,到达最底层之后再往上一步一步new(有点像深度优先遍历):

创建一个Worker实例——》查config——》需要Person——》往上创建——》new Person——》注入——》new Worker()

这里IoC Container可以直接隐藏具体的创建实例的细节,在我们来看它就像一个工厂:

创建一个Worker实例——》查config——》需要Person——》往上创建——》new Person——》注入——》new Worker()

我们就像是工厂的客户。我们只需要向工厂请求一个Worker实例,然后它就给我们按照Config创建了一个Worker实例。我们完全不用管这个Worker实例是怎么一步一步被创建出来。

Spring中的依赖注入

上面我们提到,依赖注入是实现控制反转的一种方式。下面我们结合Spring的IoC容器,简单描述一下这个过程。

class MovieLister… private MovieFinder finder; public void setFinder(MovieFinder finder) { this.finder = finder; }class ColonMovieFinder… public void setFilename(String filename) { this.filename = filename; }

我们先定义两个类,可以看到都使用了依赖注入的方式,通过外部传入依赖,而不是自己创建依赖。那么问题来了,谁把依赖传给他们,也就是说谁负责创建finder,并且把finder传给MovieLister。答案是Spring的IoC容器。要使用IoC容器,首先要进行配置。这里我们使用xml的配置,也可以通过代码注解方式配置。下面是spring.xml的内容

<beans> <bean id=”MovieLister” class=”spring.MovieLister”> <property name=”finder”> <ref local=”MovieFinder”/> </property> </bean> <bean id=”MovieFinder” class=”spring.ColonMovieFinder”> <property name=”filename”> <value>movies1.txt</value> </property> </bean></beans>

在Spring中,每个bean代表一个对象的实例,默认是单例模式,即在程序的生命周期内,所有的对象都只有一个实例,进行重复使用。通过配置bean,IoC容器在启动的时候会根据配置生成bean实例。具体的配置语法参考Spring文档。这里只要知道IoC容器会根据配置创建MovieFinder,在运行的时候把MovieFinder赋值给MovieLister的finder属性,完成依赖注入的过程。下面给出测试代码

public void testWithSpring() throws Exception { ApplicationContext ctx = new FileSystemXmlApplicationContext(“spring.xml”);//1 MovieLister lister = (MovieLister) ctx.getBean(“MovieLister”);//2 Movie[] movies = lister.moviesDirectedBy(“Sergio Leone”); assertEquals(“Once Upon a Time in the West”, movies[0].getTitle());}根据配置生成ApplicationContext,即IoC容器。从容器中获取MovieLister的实例。

总结 控制反转是一种在软件工程中解耦合的思想,调用类只依赖接口,而不依赖具体的实现类,减少了耦合。控制权交给了容器,在运行的时候才由容器决定将具体的实现动态的“注入”到调用类的对象中。 依赖注入是一种设计模式,可以作为控制反转的一种实现方式。依赖注入就是将实例变量传入到一个对象中去(Dependency injection means giving an object its instance variables)。 通过IoC框架,类A依赖类B的强耦合关系可以在运行时通过容器建立,也就是说把创建B实例的工作移交给容器,类A只管使用就可以。


2.Spring framework七个模块:

??Spring 框架包含许多特性,并被很好的组织在下图所示的七个模块中。将依次介绍每个模块。??

2.1. Spring Core

Core 封装包是框架的最基础部分,提供IoC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需求,并真正允许你从程序逻辑中分离出依赖关系和配置。

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。

2.2. Spring Context2.3. Spring DAO2.4. Spring ROM2.5. Spring AOP2.6. Spring Web2.7. Spring MVC

请关注!未完待续…


平平淡淡才是真

Spring2.0 学习笔记

相关文章:

你感兴趣的文章:

标签云: