SpringIOC

330 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

IOC,是Inverse Of Control的缩写,意为控制反转,控制反转指的是将对象创建的权力交出去,在这之前,我们需要某个对象的时候就得通过new关键字进行创建,例如:

public class Main {

    private User user;
    
    public String getUserName(){
        return user.getName();
    }
}

然而当类越拉越多,类与类之间的关系越来越复杂,我们就很难维护它们了,而IOC的出现,则帮助我们解决了这一问题。

在Spring框架中,它为我们维护了一个容器,这个容器就是用来存储Bean的,它将会在启动时进行一些初始化,将项目中需要使用的Bean直接注册到容器中,以后想要使用直接从容器中获取就可以了:

public class Main {

    public String getUserName() {
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        User user = context.getBean(User.class);
        return user.getName();
    }
}

可能你会觉得这样不是变得更复杂了吗?别急,Spring提供了一种方式来实现IOC,它就是DI,意为依赖注入:

public class Main {

    @Autowired
    private User user;

    public String getUserName() {
        return user.getName();
    }
}

现在是不是觉得使用起来非常方便了?

那么接下来的问题就是我们如何将一个对象放入Spring的容器中呢?

实现方式有很多,使用配置文件放入:

<beans>
<bean id="user" class="com.wwj.spring.user"/>
</beans>

使用注解放入:

@Component
public class User{
}

用注解的话需要配合组件扫描进行:

<component-scan base-package="com.wwj.spring"/>

使用配置类放入:

@Configuration
public class MyConfig{
    @Bean
    public User user{
        return new User("zs",20);
    }
}

在Spring中,这个管理Bean的容器实际上就是一个Map,Map是键值对的结构,键是Bean的id,而value就是Bean的对象实例。

Spring通过依赖注入实现了控制反转,使得程序员彻底解放了双手。