IDE建立Spring项目
idea建立spring项目相当方便 , 可以自动生成spring配置文件 , 和自动导入Spring所需jar包.
File—>new—>project—>Spring
点击Next等待jar包导入,成功生成javaSpring工程。
该工程与普通java工程无异 , 只是多了一个spring-config.xml文件,这个文件是干嘛用的,稍后在进行讲解。
既然Spring是框架那么接下来我将简单说明该如何使用它,Spring的核心是AOP(面向切面编程)和IOC(依赖注入)是Spring的核心,那么AOP好IOC到底是什么呢?我们先看下面的例子:
在刚刚创建的工程中新建两个类:
Server.class
Main.class
Server.class就不用说了,我们重点看Main.class,如果你没有重来没有接触过Spring,你肯定会感到困惑,在主函数main中我并没有创建(new)Server的实例,却用了什么奇怪的方法生成了Server实例,并且还调用了Server的putName()方法。putName()方法是输出我们设置的名字,应该先采用Server的setName()方法设置才对啊,按理说这样是不会有输出的。是这样吗?那么我们现运行一下看看吧。
运行结果:
结果输出了一个“山东科技大学”,当然这个输出的字符串是我自己设置的,那么在那设置呢,怎么设置呢?别急,让我慢慢道来。
还记得工程中的spring-config.xml文件么,我们就是在这里面对Name进行设置的。
打开spring-config.xml文件看看,下面是我的spring-config.xml:
是不是和我的不一样,我的多了一部分内容,那么请加上它在运行看看吧?
<bean id="example_one" class="Server">
<property name="name" value="山东科技大学"></property>
</bean>
是不是运行成功了!
那么,上面所加的这段代码是什么呢。你可以简单的理解为,让系统生成一个静态的全局的Server对象,并且把这个对象的成员name的值设置为“山东科技大学”。当然这个对象一必须要拥有一个名字,否者我们找不到它,这个静态对象的名字就叫做“example_one”。我这么一说你就能明白上面的id , name , value这几个属性了吧。
我们在回到Main类的main函数中:
![](/qrcode.jpg)
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
这行代码的意思是获取Spring-config.xml的上下文,Spring是根据Spring-config.xml的配置来实现AOP和IOC的,所以主程序要先获取到Spring-config.xml文件才能知道下一步的动作。(好了,我知道这么说你们不明白,就好像你要吃苹果,你得先拿到苹果吧,这行代码就是获得苹果)
接下来从苹果中,啊不,从Spring-config.xml文件中,找到生成的静态Server对象:
Server hello = (Server)context.getBean("example_one");
所以说,Spring工程在运行主程序前,会先审查Spring-config.xml的内容,根据他的配置做出动作,后运行主程序main。
那么问题又来了:为什么要使用这种方式来生成对象,而不用直接new一个呢?
首先new一个对象,JVM要经过这样的初始化顺序:父类静态块>子类静态块>父类属性>父类构造器>子类属性>子类构造器,着一系列的工作会消耗大量的内存和cpu。
然而Spring实现了对象池(类似于java的常量池),一些对象创建和使用完毕后不会被销毁,下次需要这个对象,不new,直接重池中取出来用。这种方法既节省时间,cpu占用,还省内存,对于大型服务器来说是相当必要的。