mvc模式是现在流行的一种软件设计,将表现层,业务层和控制层划分开来,使得软件结构更加清晰,各层间的耦合度降低,便于各开发单元协同工作。通过ioc容器,进一步实现各层之间的依赖的解耦,可以大大提高程序可配置性,灵活性,便于扩展和维护。
如何理解并创建一个ioc容器,实现其依赖注入的特性呢?一个ioc容器实际上是一个保存着所有依赖项的集合,也就是所谓的be an的集合,DI的特性其实是容器中依赖项间的关系,即各bean之间的持有关系。容器本身并不知道自己要管理哪些bean,也无法事先将bean准备好,这就需要规定规则,指定容器要管理的bean,以及这些bean存在的位置,通过配置文件来指定这些规则。容器需要有读取配置文件的能力,然后根据配置文件进行bean的管理操作。
public final class ConfigUtil {
/**
* @Description 获得基础包路径
* @Param []
* @Return java.lang.String
* @Author takou
* @Date 2018/4/6
* @Time 上午11:37
*/
public static String getBasePackage() {
return PropUtil.getString(ConfigConstant.BASE_PACKAGE,"org.smartweb");
}
/**
* @Description 获得jsp文件路径
* @Param []
* @Return java.lang.String
* @Author takou
* @Date 2018/4/6
* @Time 上午11:37
*/
public static String getJspPath() {
return PropUtil.getString(ConfigConstant.JSP_PATH,"/WEB-INF/view/");
}
/**
* @Description 获得资源文件路径
* @Param []
* @Return java.lang.String
* @Author takou
* @Date 2018/4/6
* @Time 上午11:38
*/
public static String getAsset() {
return PropUtil.getString(ConfigConstant.ASSET,"/asset");
}
}
框架启动后,容器通过配置文件指定的基础包名,运行时获得包名下的所有要管理的bean,加入到容器中。此时就需要java的运行时技术:反射了。反射的前提首先要获得类的class文件,通过类加载器加载class文件,然后通过反射创建类的实例bean。
/**
* @Description 获得类加载器
* @Param []
* @Return java.lang.ClassLoader
* @Author takou
* @Date 2018/4/4
* @Time 下午8:19
*/
public static ClassLoader getClassLoader() {
return Thread.currentThread().getContextClassLoader();
}
/**
* @Description 加载指定类名的类
* @Param [className, isInitialized]
* @Return java.lang.Class
* @Author