实习已经有段时间了,今日我在阅读代码的时候,脑子突然出现了几个问题,在此将它们记下,以便遗忘。
1.什么是依赖注入?
2.注入的到底是什么?
3.哪里能体现出?
然后我带着我的这些问题开启了疯狂的百度模式,接下来用我自己的话来总结,也方便以后回顾。
起初,我是想了解springMVC的整个流程,从前端页面传来的到底怎么传入后台,在控制层究竟是什么取到前端传过来的值的(还在深入中),因为项目中是使用了Spring的,使用到了一些注解@Controller @RequestMapping @Resource,目前来说在项目中用的最多,之前学习spring框架的时候也是模模糊糊跟着视频学,听了下它们这些注解的用途是什么,而然自己并没用真正想去理解它们的用途。
@Controller和@RequestMapping这里我就不做解释了,主要是对@Resource做解释.
首先我们要明白Spring的两大核心IOC和AOP,为啥说是spring的核心呢,我的理解就是它大大程度上帮助了人们,就好比袁隆平发明杂交水稻,发明电灯泡的爱迪生,比尔盖茨....等等,这么一说大概就知道为什么称他们是核心了吧。
没错。IOC大大减少了我们去new某个对象的语句,在我查询很多文章之后,我还是决定用一个例子来理解,依赖注入比较合适,也比较好理解。
现在有一个人(Man类),他喜欢开车(Car类),平常喜欢开车溜达,可以用下面的伪代码演示:
/**
* Man类
*/
public Class Man{
private Car c = new Car();
public void liuda(Car c){
c.run();//开车溜达..
}
public static void main(String [] args){
Man m = new Man();
m.liuda(c);
}
}
/**
* Car类 这是一台老爷车,功能比较少...low
*/
public Class Car{
private Integer id;
private String color;
private String type;
public void run(){
System.out.println("出门溜达了。。")
}
}
他开车需要有车,所有他需要new,时间一长,车坏了,他需要换辆新车——跑车,这个车就很厉害,不仅贵,而且功能也多,好了,现在可能就有人想到了,new的那个车,我们得换了,然后我们就去改代码呀...改需求,要重新new。是不是读到这里就可以感受到这么做非常的憨。当然我们能想到的我们前辈早就想到了,Spring发明的人我没有去百度,就算我不知道他我也觉得他非常的牛逼。
接下来稍微坐下修改,代码就会发生翻天覆地的变化:
/**
* 还是我们的Man类
*/
public Class Man{
@Resource("Car") //这个Resource注解就可以是IOC的化身,也就是依赖注入的体现所在!
private ICar c; //现在我不这么去new了 因为我有springIOC在手
public void liuda(Car c){
c.run();//开车溜达..
}
public static void main(String [] args){
Man m = new Man();
m.liuda(c);
}
}
/**
* Car类 这个车我们将它定义为一个接口
*/
public intface ICar{
void run();
void fly();
void swimming(); //我这新车不仅可以跑还可以飞,下海,真正的海陆空三栖
}
/**
* Car类接口定义好了之后,不管后面再出现多么牛B的车,我都不怕了,因为我根本不用去修改任何代码只需要,继承这个接口,管你有多少个功能,你随便写,反正不影响我(这里的‘我’可以理解为前面的Man类)
*/
public Class Car implement ICar{
private Integer id;
private String color;
private String type;
@Override
public void run(){
System.out.println("出门溜达了。。")
}
}
这时候,你可以做下对比,可以看到,Man类里面,相比较之前的代码而言,我根本就不需要做任何修改,就可以达到“换车”目的!
到这里,我没有去干巴巴的去将理论,因为理论必须结合实际才能理解,所以我举了个很简单的例子。如果刚刚是带着问题来的,那么我可以肯定的告诉你答案只需要对比两段代码就知晓了。
总结一下:
1.什么是依赖注入?
答:依赖注入就是帮助我们去创建对象,我们可以手动创建,为啥还需要它帮,因为这么做就是我了简化我们的代码,试问如果大家都去new对象了,这里new一下,那里new一下,好的,最后别人来看你的代码,就会发现,这人没做什么功能,new对象到时new的挺多的。还有一个就是依赖注入真正的预防了我们去在创建对象的出现的不必要的资源浪费!
2.注入的到底是什么?
答:其实根据上面代码来的话,可以看到@Resource这个注解就是注入的入口,它注入的也就是ICar,然后根据注解后面的(“name”)里的name来决定我去完成具体的哪个实例
3.哪里能体现出?
答:这个问题还用回答么
纯手打,有错还请指出,谢谢!