1. 程式人生 > 程式設計 >SPRING管理XML方式過程解析

SPRING管理XML方式過程解析

1.有三種例項化方式(無參構造,靜態工廠,例項工廠),最常用的還是無參構造的方式

2.bean標籤中常用的屬性

id/name:唯一標識名稱,兩者作用一樣,只是name中可以包含特殊字元

class:類的完全路徑名

scope:bean的作用域 singleton :單例 (預設) prototype:每getBean建立一個新的 (常用) request session (不常用)

一般都預設為singleton ,當整合struts2時,它的action是多例的,它要交給spring去管理,所以用多例

init-method:當bean被載入容器中時呼叫

destroy-method:當bean從容器中刪除時呼叫 (scope=prototype時有效)

(init-method和destroy-method在web容器中會自動呼叫,但是main函式或測試用例需要手動呼叫)

3.bean的生命週期

package com.pheony.demo2;

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 Food implements BeanNameAware,ApplicationContextAware,InitializingBean,DisposableBean {

  public Food(){
    System.out.println("第一步,利用構造方法例項化啦");
  }

  private String name;    //食品名稱
  public void setName(String name) {
    System.out.println("第二步,設定屬性啦");
    this.name = name;
  }
  public String getName() {
    return name;
  }

  @Override
  public void setBeanName(String s) {
    System.out.println("第三步,設定bean的名稱啦");
  }

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    System.out.println("第四步,瞭解工廠資訊啦");
  }

  @Override
  public void afterPropertiesSet() throws Exception {
    System.out.println("第六步,屬性設定後啦");
  }

  public void setup(){
    System.out.println("第七步,初始化啦");
  }

  public void run(){
    System.out.println("第九步,執行自身業務方法啦");
  }

  @Override
  public void destroy() throws Exception {
    System.out.println("第十步,執行spring的銷燬方法啦");
  }

  public void setdown(){
    System.out.println("第十一步,執行自身銷燬方法啦");
  }

}
package com.pheony.demo2;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * 後處理bean,很關鍵,AOP就是利用這個實現的
 */
public class MyBeanPostProcessor implements BeanPostProcessor {
  @Override
  public Object postProcessBeforeInitialization(Object o,String s) throws BeansException {
    System.out.println("第五步,初始化前方法來啦");
    return o;
  }

  @Override
  public Object postProcessAfterInitialization(Object o,String s) throws BeansException {
    System.out.println("第八步,初始化後方法來啦");
    return o;
  }
}
<bean id="food" class="com.pheony.demo2.Food" scope="singleton" init-method="setup" destroy-method="setdown">
    <!--在實體類中屬性最好都加上set/get方法,DI根據set/get方法找到對應的屬性-->
    <property name="name" value="香蕉"></property>
  </bean>
  <bean class="com.pheony.demo2.MyBeanPostProcessor"></bean>
package com.pheony.demo2;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestFood {

  @Test
  public void test1(){
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
    Food food = (Food)ac.getBean("food");

    food.run();

    ac.close();
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。