Spring简介

Spring是一个应用程序级别的轻量级框架,对企业级开发提供“一站式”服务。sping是一个开源的框架。程序下载站点:http://spring.io/projects/spring-framework 

什么是轻量级框架?

轻量级框架是和重量级框架(如:EJB)比较而言的,spring框架的核心包大概1M左右。

什么是容器?

容器可以装载对象、实例化对象和配置对象之间的依赖关系。

IOC/DI?

IOC:IOC的全称是inversion of control(控制反转)是指程序之间的依赖关系由依赖具体实现,变为依赖抽象接口。依赖抽象非具体!

DI:DI的全称是dependence injection(依赖注入)是指程序之间的依赖关系由容器动态注入,而非硬编码实现。Spring里面的所有类都叫java bean,类和类之间的依赖关系都写到配置文件里面去,比如spring里面的所有的bean比作是项链的每一个珠子,而配置文件可比作是串起来每个珠子的线。

AOP?

AOP全称是aspect oriented programming(面向切面编程)是指程序的某一方面独立出来,单独设计。如:事务、日志、权限等。而OOP面向对象编程。

IOC容器?

在spring中最核心的思想是实现IOC容器,spring的大部分功能都是基于IOC容器的。

AOP实现?

除了IOC之外,Spring中最抢眼的是AOP实现了,在spring中提供了三种对AOP编程技术的实现:

        1.对持久层的支持

Spring对持久层做了良好的支持,(封装了JDBC的操作,集成流行的ORM技术框架hibernate、iBATIS、mybatis,EclipseLink,JFinal、JDO)

        2.对web层支持

         a.Spring MVC

         b.对其他框架的集成(Struts、webwork)

         3.对其他框架和技术的集成

         RMI 和webservice

         EJB

        JavaMail

        定时任务和调度

一、Spring例子初步

     1.新建web项目,然后通过properties传递name参数

       properties文件是在src目录下创建file文件,命名Name.properties即可。该例子的思想就是通过加载配置文件达到任意修改properties文件的目的。

      

spring 架构 分层 spring架构入门例子_System

 新建HelloWorld类

1 package com.feimao.test;
 2 
 3 public class HelloWorld {
 4     private String name;
 5     public String getName(){
 6         return this.name;
 7     }
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     public String hello(){
12         return "hello , " + name;
13     }
14 }

 创建Tester类

1   public static void main(String[] args){
 2 
 3         HelloWorld hw = new HelloWorld();
 4 
 5         String name = " ";
 6 
 7         Properties prop = new Properties();
 8 
 9         try {
10 
11             prop.load(Tester.class.getClassLoader().getResourceAsStream("Name.properties"));
12 
13             name = prop.getProperty("name");
14 
15         } catch (IOException e) {
16 
17             e.printStackTrace();
18 
19         }
20 
21         hw.setName(name);
22 
23         System.out.println(hw.hello());
24 
25     }
26 
27 }

properties文件构造

1 name=feimao

 二、Spring版本重写下上面的例子

       1.添加jar包,用了spring的两个核心jar包,一个是spring.jar,一个是日志commons-logging-1.2.jar。

       2.创建配置文件,目的是声明javabean,主要是通过xml的配置文件,配置beans中的id、class和其属性property

       3.获得bean工厂,然后通过容器实例,加载读取beans.xml

       4.测试

spring 架构 分层 spring架构入门例子_spring 架构 分层_02

创建beans.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
3         >
4 <beans>
5     <bean id = "hw" class = "com.feimao.test.HelloWorld">
6             <property name = "name" value = "feimao"/>
7     </bean>
8 
9 </beans>

构造Spring版本的测试类

1 package com.feimao.test;
 2 
 3 import org.springframework.beans.factory.BeanFactory;
 4 import org.springframework.beans.factory.xml.XmlBeanFactory;
 5 import org.springframework.core.io.ClassPathResource;
 6 import org.springframework.core.io.Resource;
 7 
 8 public class Tester {
 9     public static void main(String[] args){
10         Resource r = new ClassPathResource("beans.xml");//读取配置文件
11         BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
12         HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
13         System.out.println(hw.hello());
14     }
15 }

 三、演示USB 接口、移动硬盘、U 盘和计算机之间的依赖关系,以便更好的理解依赖注入和控制反转的思想。

        依赖注入最常用的方式:

                设置注入和构造方法注入

创建USB接口

1 package com.feimao.test;
2 
3 public interface USB {
4     public void read();
5     public void write();
6 
7 }

 创建硬盘的类并实现USB接口

1 package com.feimao.test;
 2 
 3 public class UDisk implements USB{
 4     @Override
 5     public void read() {
 6         System.out.println("from UDisk read!");
 7     }
 8     public void write() {
 9         System.out.println("to UDisk write!");
10     }
11 }

 创建移动硬盘的类并实现USB接口

1 package com.feimao.test;
 2 
 3 public class MoveDisk implements USB {
 4     @Override
 5     public void read() {
 6         System.out.println("from MoveDisk read!");
 7     }
 8 
 9     public void write() {
10         System.out.println("from MoveDisk read!");
11     }
12 }

创建电脑类并依赖USB接口

1 package com.feimao.test;
 2 
 3 public class Computer {
 4     private USB usb;
 5     public USB getUsb() {
 6         return usb;
 7     }
 8     public void setUsb(USB usb){
 9         this.usb = usb;
10     }
11     public void test(){
12         usb.read();
13         usb.write();
14     }
15 }

Tseter类中添加Computer getBean方法

1 public class Tester {
 2     public static void main(String[] args){
 3         Resource r = new ClassPathResource("beans.xml");//读取配置文件
 4         BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
 5         /*HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
 6         System.out.println(hw.hello());*/
 7         Computer c = (Computer) factory.getBean("c") ;
 8         c.test();
 9     }
10 }

在beans.xml文件中添加新的bean

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
 3         >
 4 <beans>
 5     <bean id = "hw" class = "com.feimao.test.HelloWorld">
 6             <property name = "name" value = "feimao"/>
 7     </bean>
 8     <bean id = "uDisk" class = "com.feimao.test.UDisk"/>
 9     <bean id = "moveDisk" class = "com.feimao.test.MoveDisk"/>
10     <bean id = "c" class = "com.feimao.test.Computer">
11         <property name = "usb" ref = "uDisk"/>
12     </bean>
13 
14 </beans>

 

spring 架构 分层 spring架构入门例子_System_03