7. Spring IoC学习

1.基本概念

IoC(Inversion of Control),控制反转,通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

  • IoC的作用:管理所有的Java对象(也称bean)及其相互间的依赖关系。

2.IoC的两种设计模式

  • 反射:在运行状态中,根据提供的类的路径或类名,通过反射来动态获取该类 的所有属性和方法。
  • 工厂模式 :把IoC容器当做一个工厂,在配置文件或注解中给出定义,然后利用反射技术,根据给出的类名生成相应的对象。对象生成的代码及对象之间的依赖关系在配置文件中定义,实现了解耦。

3.DI(依赖注入)的两种注入方式

  • 构造器注入 (constructor-arg)
  • setter (property)
    注意!!!
  • 注入对象中没有setter方法的实现,则使用构造器注入的方式
  • 对于强依赖,可使用构造器注入,弱依赖,推荐使用Setter注入

4.配置和使用

4.1配置方式
  • xml方式

   

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

5.依赖注入的实例

  • 消息服务接口用来打印消息和接口的实现类
public interface MessageService {
   String getMessage();
}
public class MessageServiceImpl implements MessageService {
    private String username;
    private int age;

    public MessageServiceImpl(String username, int age) {
        this.username = username;
        this.age = age;
    }

    @Override
    public String getMessage() {
        return "Hello World!" + "\nusername is " + username + ",age is " + age;
    }
}
  • 打印器类
public class MessagePrinter {
    final private MessageService messageService;

    public MessagePrinter(MessageService messageService) {
        this.messageService = messageService;
    }

    public void printMessage() {
        System.out.println(this.messageService.getMessage());
    }
}
  • 配置文件
 
    
        
        
    

    
        
    
  • 应用主类
public class MessageApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
        MessagePrinter messagePrinter = context.getBean(MessagePrinter.class);
        messagePrinter.printMessage();
    }
}
  • 运行结果


    7. Spring IoC学习_第1张图片
    运行结果

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