小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
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通过依赖注入实现了控制反转,使得程序员彻底解放了双手。