记录IOC的简单理解

1.什么是IOC

inversion of control (控制反转)是中设计思想:托管(自己的理解)。即java对象本来是要自己new出来,托管给ioc容器。ioc容器负责对象的创建、依赖注入。

托管的理由:1.减少重复创建对象,节省内存资源。

2.资源可配置,灵活并且易于管理。

举例理解:

ioc就像你网上买商品,只需要某东某宝上下单,之后会把东西派送到你上。而不是你直接生产你需要的商品。

”下单“ 相当于注解/xml配置(你需要啥、住址), 平台负责生产和配送商品,相当于ioc容器对象的创建和依赖注入。顺丰、京东、韵达就是依赖注入的方式(下面有提到)。

2.实现原理

1.通过配置类路径、文件系统、url定位Bean资源。

2.Bean信息解析得到BeanDefinition。

3.在IOC容器中注册(记录在一个HashMap中)。

4.通过Bean工厂、应用上下文获取到Bean对象。

5.Spring本身也装载了应用上下文,提供一个接口applicationContextAware接口可以获取到上下 文。

 

3.具体的实现有哪些

1.基于xml文件配置

通过<bean>标签配置对象,常用的id设置唯一标识、class设置类路径,还有property字标签设置类属性等等。

2.基于注解配置

在类名上注解bean有四种:@Component、@Resource、@Controller、@Service

这四个注解虽然功能是一样的,但是从命名上就能看出每个注解适用的不同层面或模块。

 

3.依赖注入

1.javase一般传递一个对象是通过构造函数和set方法实现。就是你new了个对象如何传递给别的类。当然同一类型对象可以直接等号(=)传递。

Person(Person person){

this.person=person;

}

* setPerson(Person person){

this.person=person;

}

 

2.有了spring ioc后,对象的创建和注入都可以通过注解实现。

常用的注解有@Autowired、@Resource

@Autowired和@Resource可以在构造函数、set方法、接口上注解注入依赖的对象。

@Autowired

Person(Person person){

this.person=person;

}

@Autowired

* setPerson(Person person){

this.person=person;

}

@Autowired

Person person;

[email protected]默认是根据类型匹配依赖对象,也可以和@Qualifier配合根据名字匹配

@Autowired() @Qualifier("person")

Person person;

另外注解bean名称有个默认规则

记录IOC的简单理解 

 

[email protected] 默认是根据名字匹配,(如果没有指定名字)其次按照类型匹配。

@Resource("person")

Person person;