码迷,mamicode.com
首页 > 编程语言 > 详细

(一)Spring框架基础

时间:2017-04-12 15:10:41      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:ram   配置文件   mil   .com   4.0   class   定位   9.png   font   

一、什么是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框架基础

标签:ram   配置文件   mil   .com   4.0   class   定位   9.png   font   

原文地址:http://www.cnblogs.com/shyroke/p/6699072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!