1. 程式人生 > >【spring專題】spring簡介

【spring專題】spring簡介

imp 生命 設置 調用 處理器 為什麽 容器 參數 ram

前景概要

  對於現在的Java開發基本上可以說成是spring開發,spring全家桶可以說是把整個Java web安排的明明白白的。正因為使用的很多,所以作為一名開發者不應該僅僅是會使用spring,更要對spring的知識有一定深度的了解。這樣不論是工作還是面試都是有所幫助的。spring的實現使用了大量的設計模式,單純的看設計模式比較難以理解,結合spring代碼來看效率應該會更高一些,這也是我想看spring的原因。spring的核心是ioc與aop,所以通過這次的學習希望對ioc與aop有更深層次的理解。最後說明一下這個專題的文章是我自己的學習筆記,由於我個人水平有限,所以如果有大佬偶然看到還希望能給予指正。

什麽是spring

  spring是一款簡便開發的輕量級框架(細節的概念我就不cv了)。

為什麽要使用spring

  是因為別人都在用嗎?為啥別人都用呢,簡化開發你用不用?當然的用,現在的Javaweb開發基本上可以說就是spring開發了,spring開發不用spring用啥?

  正經點說就是,除了spring我也沒用過別的,不然我寫這個專題幹嘛,就別為難我胖虎了。

怎麽使用spring

  1. 導jar包

        <dependency>
            <groupId>org.springframework</
groupId> <artifactId>spring-core</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId
> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.2.4.RELEASE</version> </dependency>

  2.需要一個被代理的類

package com.jeff_code;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class Person implements BeanNameAware, ApplicationContextAware, InitializingBean, DisposableBean {
    private String name;

    public Person() {
        System.out.println("1.構造器創建類");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        System.out.println("2.set參數");
        this.name = name;
    }

    public void init() {
        System.out.println("7. 初始化方法");
    }

    public void destory() {
        System.out.println("11.全部結束整個銷毀方法");
    }


    @Override
    public void setBeanName(String s) {
        System.out.println("3.將xml配置中的id/name的名字得到");
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("4.讓我們的類了解工廠信息了");
    }


    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("6. 屬性設置後執行");
    }

    public void sayHello() {
        System.out.println("9. 如果調用了它的方法才會執行到這個生命周期,"+ name);
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("10. Spring的一個銷毀方法");
    }
}

  3.需要一個配置文件進行bean的註入

<?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="person" class="com.jeff_code.Person" init-method="init" destroy-method="destory">
        <property name="name" value="jeff"></property>
    </bean>
    <!--前後置處理器是生命周期的一個步驟,不需要我們配id調用的-->
    <bean class="com.jeff_code.MyBeanPostProcessor">

    </bean>
</beans>

  4. 我們就可以使用spring生成一個object了

package com.jeff_code;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    @org.junit.Test
    public void testLife() {
        ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
        Person person = ac.getBean("person", Person.class);
        person.sayHello();
        ac.close();
    }
}

  我們就使用spring生成了一個我們要使用對象,關於對象是怎麽init,destroy,怎麽註入,何時屬性賦值等操作,使用者是感知不到的。當然你要覺得寫這麽多還不如new Person()來的快,我覺得你說得對,就這個demo來說是這樣的,我不反駁,如果你做過大一點的web項目,我覺得應該不會這麽說。關於這個特點也是ioc帶來的便利,我這裏只是簡單的概要,只講一下實現的思路。

  使用spring是不難看出,我們使用了一個ApplicationContext,讀取了我們的配置文件,這時你可能想這是spring提供的類,這個類的功能就是讀取xml文件,解析出配置中需要註入的bean,然後通過反射機制生成一個對象,將對象存在ioc容器中,所以在第二步getBean方法直接就獲取到這個對象,此時我們就可以使用這個對象了。粗略的說,我認為粗略地說(很粗)控制反轉確實就是這樣實現的。

  當然我學習spring這麽粗略是不可行的,所以接下來主題就是關於第一步讀取xml並且根據配置文件進行依賴註入到ioc容器的過程,這部分是spring的一個核心,需要認真研究一下。

【spring專題】spring簡介