一、Spring是什么?
Spring是于2003 年兴起的,它是一个开源的轻量级的Java开发框架,它能解决企业应用开发的复杂性,简化应用程序的开发。Spring使用基本的JavaBean来完成以前,只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IOC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,给予了 Java 程序员更高的自由度。
二、Spring的优点
1)方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2)方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
3)降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
4)方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5)AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。
三、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:
是不是和我的不一样,我的多了一部分内容,那么请加上它在运行看看吧?
<beanid="example_one"class="Server"><propertyname="name"value="山东科技大学"></property></bean>
是不是运行成功了!
那么,上面所加的这段代码是什么呢。你可以简单的理解为,让系统生成一个静态的全局的Server对象,并且把这个对象的成员name的值设置为“山东科技大学”。当然这个对象一必须要拥有一个名字,否者我们找不到它,这个静态对象的名字就叫做“example_one”。我这么一说你就能明白上面的id , name , value这几个属性了吧。
我们再回到Main类的main函数中:
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占用,还省内存,对于大型服务器来说是相当必要的。
原文链接:https://blog.csdn.net/HUXINY/article/details/80076561
网友评论