Spring学习

IoC

在学习Spring之前,首先需要了解什么是IoC。
IoC的全称是Inversion of Control,中文叫做控制反转。
IoC这个概念其实很常见,只不过是Java里又包装出了一个概念,容易唬住新手。它还有个别名叫依赖注入(Dependency Injection)。额,又冒出来一个概念。大家不要怕,我这里只是为了把已有的概念联系起来。《head first设计模式》中,模板方法模式里提到的好莱坞原则“Don't call us, we will call you.”,也是IoC的思想。

下面上代码,使用IoC之前的代码:

public FXNewsProvider()
{
newsListener = new DowJonesNewsListener();
newPersistener = new DowJonesNewsPersister();
}

使用IoC之后的代码:

public FXNewsProvider(IFXNewsListener newsListner,IFXNewsPersister newsPersister) 
{
this.newsListener = newsListner;
this.newPersistener = newsPersister;
}

这就是IoC做的事情,将FXNewsProvider从依赖具体的类中解耦出来。

在Spring中使用IoC

回到Spring,IoC和Spring又有什么关系呢?
Spring使在项目中使用IoC变得非常简单,而且必须。
刚从别的框架转到Spring的开发者可能会感到有点不适应,每次引用一个类,都需要在xml里配置一下相关信息。



   
   
   
   
   
   
   

这样配置以后,在类中引用textEditor或者spellChecker,都不需要显式声明了。直接增加Autowired注解,Spring在启动的时候,就会自动为你实例化并注入依赖的类中。

package com.tutorialspoint;
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
   @Autowired
   private SpellChecker spellChecker;
   public TextEditor() {
      System.out.println("Inside TextEditor constructor." );
   }  
   public SpellChecker getSpellChecker( ){
      return spellChecker;
   }  
   public void spellCheck(){
      spellChecker.checkSpelling();
   }
}

的属性很多,这里简单介绍一个比较常用的:
default-lazy-init:默认值为false,用来标志是否对所有的进行延迟初始化。如果想让程序启动速度加快,可以将false改为true,在启动时跳过bean的初始化。

Spring的容器

Spring的容器有两种类型:BeanFactory和ApplicationContext。
BeanFactory是基础类型IoC容器,ApplicationContext在BeanFactory的基础上勾践,是相对比较高级的容器实现。
我们先介绍BeanFactory,上面的xml文件配置了以后,还需要在代码里告诉Spring去哪里加载这个xml文件。

package com.tutorialspoint;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class MainApp {
   public static void main(String[] args) {
      XmlBeanFactory factory = new XmlBeanFactory
                             (new ClassPathResource("Beans.xml"));
      HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
      obj.getMessage();
   }
}

参考内容:
《Spring 揭秘》
Sping 的 BeanFactory 容器
Spring @Autowired 注释

你可能感兴趣的:(Spring学习)