spring实现ioc的四种方法,spring的ioc的三种实现方式

spring实现ioc的四种方法,spring的ioc的三种实现方式,简单实现Spring的IOC原理详解

本文主要介绍Spring的IOC原理的简单实现,有一定的参考价值,有需要的朋友可以参考一下。

InversionofControl(缩写为IoC)

简单来说,当你需要一个对象的时候,你不需要手动创建一个新的,其他容器会为你提供。Spring是IOC容器。

例如:

在春天,经常需要在服务中装配一把刀。通常,使用@Autowired注释:类似这样

公共类服务实现{

@自动连线

道道;

public void getData(){

Dao . get data();

}

这里直接使用未初始化的Dao会报告空指针异常,所以Spring的做法是通过反射为你加载所需的类。

下面的例子模拟了Spring的DI和IOC。

首先,编写两个注释来模拟Spring的注释:

实体标注表示Spring的@Service。

@Target(ElementType。TYPE) //类

@保留(RetentionPolicy。运行时间)

public @interface实体{

}

它代表@春天自动编写

@Target(ElementType。FIELD) //描述该方法的

@ retention(retention policy . runtime)//仅在运行时保留

公共@接口资源{

}

创建注释后,再创建两个类:

Rain类表示需要从其他地方获取天气数据(数据库或服务器)

公共类雨{

公共虚空雨(){

System.out.println(下雨);//为了方便直接写。

}

}

天气类表示获取的天气数据。

@实体

公共类天气{

@资源

下雨下雨;//这里雨水是后面反射直接注入的。

public void weather_rain() {

rain . rain();

}

以下是反射直接注入:

首先遍历指定的包名:首先省略这一步,

首先构建一个用List模拟Spring的bean容器,也就是用已经初始化的实体注释初始化所有的类。

公共类Weather _ reflec {

listobjectobjectlist;

//模拟Spring容器

公共天气_反射(){

object list=new ArrayList object();

}

//其实这里最好的做法是先找出有标注的类,判断它有实体标注再传入。但为了方便直接省略了。

public void get_ref(Object object)抛出ClassNotFoundException、IllegalAccessException、InstantiationException、NoSuchMethodException、InvocationTargetException {

班级?clazz=object . getclass();

if(clazz . isanotationpresent(entity . class)){

//确定是否有实体注释。

field[]fields=clazz . getdeclaredfields();

//获取其变量

for(字段字段:字段){

if(field . isanotationpresent(resources . class)){

//确定是否需要注射。

班级?rain class=class . forname(field . gettype()。getName(),false,Thread.currentThread()。getContextClassLoader());

//在这里,首先加载Rain类

field.set(object,rain class . new instance());

//分配给rain

object list . add(object);

//最后,将指定的天气保存到容器中。

}

}

}

}

公共ListObject returnList(){

返回objectList

//返回容器供以后使用

}

最后,它直接用于模拟控制器。

公共类天气预报{

公共静态void main(String args[])引发ClassNotFoundException、NoSuchMethodException、InstantiationException、IllegalAccessException、InvocationTargetException {

weather prediction weather prediction=new weather prediction();

Weather Weather=(Weather)Weather prediction . springdo();

weather.weather_rain()。

//这里如果是普通的调用,会报告空指针异常,但是容器给它赋了变量rain,所以可以正常输出。

}

/*

模拟Spring启动过程,这一步其实可以单独写一个类,这一步是容器应该做的,我们不需要管。

*/

公共对象springDo()抛出ClassNotFoundException、NoSuchMethodException、InvocationTargetException、InstantiationException、IllegalAccessException {

Weather _ reflec Weather _ reflec=new Weather _ reflec();

//需要在启动时加载。

天气weather=新天气();

//扫描类批注后的新操作,然后进行下一步。

weather_reflec.get_ref(天气);

//对其类中的变量执行新操作,并将它们放入容器中。

object object=weather _ reflec . return list()。get(0);

返回对象;

}

后期操作输出:下雨了。

天气预报中没有新的降雨操作,但是可以使用。这应该是模拟Spring最简单的IOC例子了。当然Spring的IOC容器比这个强大很多,比如线程安全,各种细节。

总结

这就是本文关于简单实现Spring的IOC原则的所有细节。希望对你有帮助。感兴趣的朋友可以继续参考这个网站:

Spring IOC原理详解

简单理解Spring之IOC和AOP及代码示例

如有不足之处,欢迎留言指出。感谢您对本网站的支持!

spring实现ioc的四种方法,spring的ioc的三种实现方式