Spring IoC练习

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

1.IoC是一个很大的概念,可以用不同的方式实现。其主要形式有两种:

  • 依赖查找:容器提供回调接口和上下文条件给组件。EJB和Apache Avalon 都使用这种方式。这样一来,组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上(也就是上面所说的 类型1):容器将调用这些回调方法,从而让应用代码获得相关资源。

  • 依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)

2.IOC和bean

Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。

  • 通过构造器或工厂方法创建Bean实例
  • 为Bean的属性设置值和对其它Bean的引用
  • 调用Bean的初始化方法
  • 当容器关闭时,调用Bean的销毁方法

Spring IoC容器的核心基础包:

  • org.springframework.beans
  • org.springframework.context

3. 配置和使用

配置方式有:

  • xml形式

   

  • 注解形式
@Configuration
public class AppCar{
    @Bean
    public MyService myService(){
          return new MyServiceImpl();
   }
}

4.注解方式

  • 构造器注入
  • setter注入

示例

MassageService

public interface MassageService {
    String getMassage();

}

MassageServiceImpl

public class MassageServiceImpl implements MassageService {
    private String username;
    private int age;
    public MassageServiceImpl(String username,int age){
        this.username=username;
        this.age=age;

    }
    public String getMassage(){
        return "HelloWord!"+username+",age is"+age;
    }
}

MassagePrinter

public class MassagePrinter {
    final private MassageService service;
    public MassagePrinter(MassageService service){
        this.service=service;

    }
    public void printMassage(){
        System.out.println(this.service.getMassage());
    }
}

配置文件

 
    
        
        
    

    
        
    

MassageApp

public class MessageApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
        MessagePrinter messagePrinter = context.getBean(MessagePrinter.class);
        messagePrinter.printMessage();
    }
}

5.依赖注入详细配置

  • 直接赋值
  • 引用其他bean
  • 内部bean
  • 集合
  • Null及空字符的值
  • xml短域名空间
  • 复合属性名称

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