前言:
我就是一小白程序猴,不懂什么高新技术,只是在学习过程中把自己遇到问题或者学到的新知识记录下来,第一给自己复习用,第二小白更懂小白的苦,自己是新手所以应该更了解在刚开始学习时哪些学起来有困难,也就避开了所谓的专家盲点,给后面入坑的人一点点启示也是有用的吧.......应该...如果有同样正在学spring的同学,可以一起交流一哈(想写就写一点,边学一边更)
如果这些文字有幸被某位大牛看到,欢迎指正不足,真的欢迎!!!
spring的工作环境搭建,,,网上都是教程,自己找吧!
开始spring,必须了解以下三个概念,我尽量写的白话点儿,哈哈。
IOC:控制反转
DI:依赖注入
AOP:面向方面编程
今儿就先写一写我对IOC和DI 的理解吧:
IOC(控制反转):不是什么技术,而是一种设计思想。他是spring的内核和基础,要理解这个东西,你得知道啥叫“工厂设计模式”和“反射”,不了解的话先自学吧,,(坑以后填T_T)。
所谓“控制反转”,将控制权从程序自身转移到第三方(在spring中就是指applicationContext.xml文档)。
通俗讲,就是程序知道自己要创建一个属于某种类型的类(即实现了某个接口),但不了解要创建的这个类是该接口的哪一个具体实现类。在程序具体执行时,才向第三方请示要创建的是哪一个实体类(具体表现就是程序解析applicationContext.xml文件)。至于程序具体是怎么创建的实体类,其实就是用了java中反射(这个坑之后有时间填.....)。
这样用户不需要修改程序内容,只需要配置xml文件,就可以实现对程序的控制。
具体可以看下面的例子:
//接口 代表一个墨盒
public interface Ink {
void outInk();//喷墨
}
//实现类1,黑白墨盒
public class BlackInk implements Ink{
@Override
public void outInk() {
System.out.println("黑白墨盒!");
}
}
//实现类1,彩色墨盒
public class ColorInk implements Ink {
@Override
public void outInk() {
System.out.println("彩色墨盒!");
}
}
首先配置xml文件内容:
然后就可以在main方法中调用了:
public static void main(String[] args) {
ClassPathResource resource=new ClassPathResource("applicationContext.xml");
XmlBeanFactory factory=new XmlBeanFactory(resource);
Ink ink=factory.getBean("ink",Ink.class);
ink.outInk();
}
输出结果:
黑白墨盒!
然后,在我们不修改任何java代码的情况,只修改xml文件
再次运行main方法,结果为:
彩色墨盒!
这就是 IOC(Inversion of Control):控制反转 的设计思想。
---------------------------------------我是分割线ε≡٩(๑>₃<)۶ 一心向学------------------------------------
然后,接着上面的内容介绍DI。
DI(Dependency Injection):依赖注入,其实是IOC的另一种解释。事实上,是发现IOC这个概念不能对我们所提到spring的设计思想进行准确的描述,所以提出了DI的概念。
也有人认为IOC是个更宽泛的概念,DI是更具体的。
在我们之前传统的程序设计中,我们是通过类与类之间的调用来实现某项功能。但是用DI的设计思想,就是我们可以先创建被调用类的对象,然后把它注入到需要它的类中。
这样的设计可以让我们方便的把不同的被调用类注入同一个调用类,而不用更改代码。
说白话一点,就是我们利用DI可以在上面IOC内容的基础上创建拥有字段(属性)的类,并且对这些属性进行初始化。
接着我们上面的代码继续举栗子昂~~
在我们有了Ink接口、BlackInk以及Corlor类之后,我们再建一个Printer类:
public class Printer {
private Ink ink;
public void out(){
ink.outInk();
}
public Printer() { }
public Printer(Ink ink) {
this.ink = ink;
}
public void setInk(Ink ink) {
this.ink = ink;
}
}
在以前,我们要调用Printer类的out方法,是这个样子的:
Printer print=new Printer(new BlackInk());
print.out();
如果我们要更改墨盒,就要再次更改程序代码;
而利用DI设计思想,
我们在applicationContext.xml文件中配置:
main方法只需要这么写:
public static void main(String[] args) {
ClassPathResource resource=new ClassPathResource("applicationContext.xml");
XmlBeanFactory factory=new XmlBeanFactory(resource);
Printer printer=factory.getBean("printer",Printer.class);
printer.out();
}
这样的执行结果就是:
彩色墨盒!
而如果我们需要更改墨盒时,只需要更改xml:
不需要再次更改java代码。
核心就是怎么注入这些依赖关系。可以分为两类(以Printer为栗):
A)利用set方法,就是我们上面的这种做法。
B)利用带参构造方法
另外还可以利用
另外还要特别注意的是 <bean>的scope属性,默认值是singleton,即单例模式,只会创建一个对象。
<-IOC/DI完结->