本文转载自: https://user.qzone.qq.com/644556636/blog/1466713056
什么是IOC技术,对于很多初学者而言,或许认为IOC多么高大上。其实IOC不过如此,知道其实现原理,IOC无非砖头的数量。慢慢搬呗。
控制反转
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
这是百度对IOC的解释。然而。IOC真的很高大上么。
其实笔者之前并不知道IOC。不知道什么是IOC。不知道IOC就是笔者用烂了的东西。笔者曾经去面试,面试官问,什么是IOC,IOC的好处是什么,IOC有什么作用,为什么要用IOC。笔者懵逼了。什么是IOC。其实像这些问题也不好回答,就像什么是人,什么是技术,什么是JAVA。这类问题不需要回答。然而当笔者根据自己的思路去解释IOC的时候。面试官都不懂,说我的是错的。也许,大部分只适合照着书本写写背背。
IOC用来用去就那么几种方式,其实现原理很简单,预先实例化对象在容器池。用到的时候取出来。这样确保对象永远只会实例化一次。好像在业内又叫做神马单例模式,反正笔者也不懂。
在阳光满面的今天,笔者颜值爆表。通过纯代码来模拟一下IOC。
在代码解说前,先分享一下源码包:链接: http://pan.baidu.com/s/1gfGyQ0V 密码: 86ip
对源码做一个解说:
- annotation包,用来存放注解。InitBean 初始化实例化的bean,类似@service; WriteBean注入对象使用,类似@Resource
- bean包,用来存放参与依赖注入的bean。为了方便起见,本次测试仅扫描本包下的bean
- container包,存放对象的容器池。spring使用的是application,本次测试使用的是map。
- init包,用于对象注入操作。
- model包,存放实体类。
- test包,全局测试入口
- util包
1、 首先新建InitBean 注解类,用于对类进行实例化
package annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface InitBean {
String beanName() default "";
}
2、建立WriteBean 注解类,对字段进行注入赋值。
package annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface WriteBean {
String beanName() default "";
}
3、创建User模型。创建UserService,使用InitBean进行标志
package model;
public class User {
private String userName;
private String