第一章 Spring的核心
1.1 总述
Sping的构架如下
Core 的核心就是BeanFactory,主要是使Spring成为一个DI容器(Dependency Injection),第二章介绍
Context是core的扩展层,令spring成为一个framework,扩展了BeanFactory的一些功能,入i18n等等。
Aop层,在spring中加入aop编程。第四章介绍。
JDBC和DAO层,数据库方面,总之是程序更少出错,更容易写。第五章介绍。
ORM整合层,有人喜欢使用一些orm工具来代替直接使用jdbc连接数据库,Spring提供了一个整合的方法。第五章介绍。
Jmx,java管理扩展,在第12章介绍,号称系统管理的框架,不懂。
Java EE Connector API,jca是个整合企业信息系统的东西,没接触过。说是跟jdbc有什么类似之处
Spring MVC Framework,13,14章介绍。
Portlet MVC Framework,大部分网站是基于网页的,就是每次访问的结果是一章页面完全显示出来。每个页面都有些信息在上面。相反的,基于portlet的程序在一个页面上集成了多个功能模块。提供了一次访问多个应用程序的功能。
Spring对这个也有支持。
Spring’s Web层,Spring mvc和portlet mvc在加载Spring application context的时候要特别的考虑一下,这层就是为了这点存在的。还包括了一些小功能并且支持整合struts和jsf。
Remoting,远程调用方面的功能层。第八章。
Spring Java message service:集成了jms的功能。第十章。
尽管spring包含了很多方面,但最重要的是要认识一点,就是spring避免进行重复的事情。Spring借用了当今很多的api和framework。第五章我们可以看到,Spring不用自己的持久层框架,而是用了其他的,比如直接用jdbc,iBatis,Hibernate和jpa。
现在知道了个大概了,开始看看DI和aop的工作方式。下面开始一个例子来实践。
1.2一个spring的小程序
DI是spring里面最基本的东西。但DI到底是什么?从下面的例子就能看到了。这个跟其他的HelloWorld不大一样。
下面是代码
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
< bean id ="greetingService" class ="com.springinaction.chapter01.hello.GreetingServiceImpl" >
< property name ="greeting" value ="Buenos Dias" ></ property >
</ bean >
</ beans >
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class HelloApp ... {
public static void main(String [] args)throws Exception...{
//be sure of your's hello.xml is in the right directory
BeanFactory factory = new XmlBeanFactory(new FileSystemResource("src/hello.xml"));
GreetingService greetingService = (GreetingService)factory.getBean("greetingService");
greetingService.sayGreeting();
}
}
GreetingServiceImpl实际提供了2中注入方式,setter方式和constructor方式。具体看xml配置文件怎么写。
public interface GreetingService ... {
void sayGreeting();
}
public class GreetingServiceImpl implements GreetingService ... {
private String greeting;
public GreetingServiceImpl() ...{}
public GreetingServiceImpl(String greeting) ...{
this.greeting = greeting;
}
public void sayGreeting() ...{
// TODO Auto-generated method stub
System.out.println(greeting);
}
public void setGreeting(String greeting)...{
this.greeting = greeting;
}
}
Xml文件中,<beans>是根元素,接下来是<bean>,id是类中要调用的对象名称,class是这个类的位置,<property>元素是用来set类中属性值。<property>元素告诉Spring是用调用setXXX()来进行赋值,字符串是Buenos Dias。假如<property>改成了<constructor-arg>,就变成使用构造器来赋值。
在HelloApp中,BeanFactory就是一个容器。把hello.xml文件载入到容器中后,main()方法调用BeanFactory的getBean()方法来得到GreetingService的一个实例。有了这个实例,最后调用了sayGreeting()方法。程序最后显示的是“Buenos Dias!”。