首页 > 代码库 > (一)Spring框架基础

(一)Spring框架基础

一、什么是spring框架

  • springJ2EE应用程序框架,是轻量级的IoCAOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,ibatis框架等组合使用。

 

二、架构概述

技术分享

技术分享

  2.1  IoC(Inversion of Control) :控制反转

  • 对象创建责任的反转,在springBeanFacotoryIoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。

技术分享

 

  • spring中有三种注入方式,一种是set注入,一种是接口注入,另一种是构造方法注入。

 

  2.1.1  第一个基于spring框架的程序(使用spring框架的ioc的优势)

  • 导包,由于本例是最简单的spring的程序,所以jar包比较少。

技术分享

  •  创建spring的配置文件。

    spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:util="http://www.springframework.org/schema/util"
 xmlns:p="http://www.springframework.org/schema/p"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
 
 <!-- 以上为头文件,必须在eclipse的xml catalog里有相应xsd文件, 有了头文件之后会有提示-->
 
 <bean  class="test.Man"  name="man"></bean>   <!-- 创建test包里的Man类的对象,对象名为man -->
 </beans>

 

  •  Test.java

 

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Test {
    
    public static void main(String[] args) {
        Test test=new Test();
        
        test.one();
        test.two();
        test.three();
    
    }
/**
 * 普通模式:哪里需要对象,就在哪个方法里new 一个类的对象然后是用。
 * 存在的不足:如果有很多个类都使用一个对象,而这个对象改变了的话,就需要在很多个类里修改这个对象。
 */
    private void one() {
        PersonI man=new Man();
        man.eat();
        man.sleep();
        
    }
    
    /**
     * 设计模式(工厂模式、门面模式):
     * ,优势:如果PersonI的实现类修改了,只要在工厂PersonFactory中修改相应的类即可,而这里无须修改。
     */
    private void two() {
        PersonI woman=PersonFactory.getWomen(); //工厂模式 ,优势:如果PersonI的实现类修改了,只要在工厂PersonFactory中修改相应的类即可,而这里无须修改。
        woman.eat();
        woman.sleep();
        
    }
    
    /**
     * spring的ioc模式,将对象的实例化交给spring框架(spring容器)
     */
    private void three() {
        /**
         * 这里的Man对象是在spring.xml中创建(new)好了
         */
    //    ApplicationContext applicationContext=new FileSystemXmlApplicationContext("src/spring.xml");  //推荐使用new ClassPathXmlApplicationContext
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring.xml"); 
        Man man=(Man)applicationContext.getBean("man");  //getBean("man")里的man是spring.xml文件里的id或者name为man的bean
        man.sleep();
        man.eat();
        
    }
    
}
  • PersonFactory.java
package test;

/**
 * 工厂模式,
 * @author Administrator
 *
 */
public class PersonFactory {
    public static PersonI getMan(){
        
        PersonI man=new Man();
        return man;
        
    }
    
    public static PersonI getWomen(){
        PersonI women=new Women();
        
        return women;
        
    }
}
  • PersonI.java
package test;

public interface PersonI {
    void eat();
    void sleep();
}

class Man implements PersonI{
    
    public void eat() {
        System.out.println("Man 中的eat方法");
        
    }

    public void sleep() {
        System.out.println("Man 中的sleep方法");
        
    }

}

 class Women implements PersonI{

    public void eat() {
        System.out.println("Women 中的eat方法");
        
    }

    public void sleep() {
        System.out.println("Women 中的sleep方法");
        
    }
}

结果:

技术分享

 

  2.2  AOP面向切面编程

   aop就是纵向的编程,如下图所示,业务1和业务2都需要一个共同的操作,与其往每个业务中都添加同样的代码,不如写一遍代码,让两个业务共同使用这段代码。

 spring中面向切面变成的实现有两种方式,一种是动态代理,一种是CGLIB,动态代理必须要提供接口,而CGLIB实现是有继承。

 

 

 

 

(一)Spring框架基础