-
Notifications
You must be signed in to change notification settings - Fork 0
Description
相对于EJB,Spring 是一个轻量级的企业级Java技术。它可以使得普通的Java Bean在没有EJB或者其他企业级Java技术的帮助下,也可以拥有强大的能力。使用Spring可以使得Java开发变得更加简单。
轻量级并且最少的侵入POJOs
一个简单的Java对象,它不需要继承任何Spring提供的对象,即可作为Spring应用的一个组件,同时它也可以被应用于一个非Spring的应用。Spring相对于一些老的技术(EJB,Struts),不会强制Java对象继承自己提供的对象,达到非侵入式编程。
package org.jinlong.study.spring;
public class HelloPOJO {
public void helloPOJO(){
System.out.println("Hello Spring!");
}
}通过依赖注入和面向接口编程来达到低耦合
通常一个应用不可能只使用一个Java对象就能完成功能,都需要通过组装来使得简单的Java Bean的功能变得丰富。假如我们有一个Nest对象,它组装了一个动物类型。如下
package org.jinlong.study.spring;
public class Nest {
private Animal animal;
public Nest() {
this.animal = new Dog();
}
public void sayName() {
animal.sayName();
}
}
package org.jinlong.study.spring;
public abstract class Animal {
public abstract void sayName();
}
package org.jinlong.study.spring;
public class Dog extends Animal {
public void sayName() {
System.out.println("I am dog!");
}
}如上的代码设计虽然完成了窝和动物对象的组装的功能,但是窝和动物紧紧的耦合在一起,这样的代码不可以重用,扩展性差,并且不方便测试。因此引入依赖注入的概念,更改代码如下:
package org.jinlong.study.spring;
public class Nest {
private Animal animal;
public Nest(Animal animal) {
this.animal = animal;
}
public void sayName() {
animal.sayName();
}
}这样Nest并不知道组装的Animal的具体实现类是什么,只有在使用的时候注入以后才知道。使用依赖注入的编程思想,可以使得代码易于扩展,重用性强,并且可以通过Mock来方便的进行测试,Spring的IOC容器就是对依赖注入思想的封装,它可以使得我们更加容易的组装bean,方便的使用依赖注入思想来编程。
通过约定和切面来达到声明式编程
在应用中有一些功能是横跨多个业务模块的,例如日志,安全认证,事务控制等功能。如果在每个模块中直接加入这些功能,会使得我们的代码中有很多重复类似的代码,另外这些代码并不是这些模块核心的业务的代码,却与核心业务耦合在一起。业务模块除了实现自己的核心功能,并且不得不去关心日志,安全,事务等问题。
面向切面的编程思想将这些功能从业务中隔离出来,以横切面的形式插入到各个业务模块中,可以使得业务模块专心完成核心业务逻辑的实现,而不必去关心日志,安全,事务的问题。
Spring的AOP完成了这种编程思想的封装,可以使得面向切面的编程变得更加简单。
通过切面和模板来减少样板代码
在应用经常有一些功能的实现步骤是固定的,例如JDBC,JMS,JNDI等。
它们的实现通常是,加载驱动,建立连接,业务操作,释放资源等。这样的模板代码,每次操作基本是一样的,Spring的模板编程,为我们封装了这些繁琐相同的步骤,我们利用模板编程,只需要去关心业务逻辑,对JDBC的使用,我们无需去关心驱动的加载,链接的建立和资源的释放等模板操作,这样使我们的编程更加方便简单。