亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring 簡單應(yīng)用

系統(tǒng) 1525 0
下面使用的 spring-3.0版本來演示

目標(biāo)任務(wù)
1.配置最簡單的,spring 應(yīng)用?
2.使用spring管理ServiceBean
3.手動編寫代碼 模擬 spring的初始工作



1.首先來看 spring 應(yīng)用中最基本的jar

Spring 簡單應(yīng)用


2.spring的配置文件 (可以從spring的文檔中拷貝,或者 spring自帶的 案例中拷貝)
    
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> 

</beans> 

  


3.就這樣 我們就可以 來初始化 spring 容器? 編寫單元測試
    
package junit.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

	@Test //測試 spring的 初始化
	public void init(){
		ApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		
	}
}

  


//上面 如果測試單元沒有問題 就說明 spring 框架 使用成功 !! 恭喜 !!

4.下面 來看 使用 spring容器來管理我們的 bean (首先定義bean--->然后配置)
    
package com.person.service;

public interface PersonService {
	public void save();
}

  


    
package com.person.service.impl;

import com.person.service.PersonService;

public class PersonServiceBean implements PersonService {
	public void save(){
		System.out.println("我就是save方法!");
	}
}

  


5.在spring配置文件中配置
    
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd "> 

	<!-- 這里配置后 就會有 spring來管理, 注意id 和name 的區(qū)別  -->
	<bean id="personService" class="com.person.service.impl.PersonServiceBean">
	</bean>
</beans>   
 

  


6.測試
    
package junit.test;

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

import com.person.service.PersonService;

public class SpringTest {

	@Test //測試 spring的 初始化
	public void init(){
		ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
		
		
		//方法一  獲取服務(wù)層對象
		PersonService personService=(PersonService)ctx.getBean("personService");
		//方法二
		PersonService personService1=ctx.getBean("personService",PersonService.class);
		
		personService.save();
		personService1.save();
		
	}
}

  


//如果能在控制臺 打印出? "我就是save方法!" 恭喜成功!

7.看了上面這么多? 那么spring到底怎么初始化 和 管理的 我們的bean呢? 我們自己來模擬寫一個 spring的 init 初始工作 (使用 dom4j 來讀取配置文件 -->使用 反射來創(chuàng)建對象)



8.首先加入? dom4j-1.6.1.jar 和? jaxen.jar(dom4j需要的一個jar)

9.定義隱射spring配置文件bean 的類
    

package junit.test;

/**
 * 定義  保存 spring配置文件中的bean對象
 * @author Bin
 */
public class BeanDefinition {
	
	private String id;  //對應(yīng) spring配置文件中的id
	private String className;   //對應(yīng) spring配置文件中的class 
	//get set
       // 構(gòu)造方法 
}

  


10.定義 我們自己的 讀取spring配置文件中的 ClassPathXmlApplicationContext 類
    
package junit.test;


import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

import com.sun.xml.internal.fastinfoset.stax.events.Util;


/*
 * 來模擬spring 的工作
 */
public class MySpringClassPathXmlApplicationContext {
	
	//保存 配置文件中的 bean 的信息  
	private List<BeanDefinition> beandefines=new ArrayList<BeanDefinition>();
	
	
	//保存初始化 后的對象
	private Map<String,Object> sigletons=new HashMap<String,Object>();
	
	
	public MySpringClassPathXmlApplicationContext(String fileName) {
		this.readXml(fileName);
		this.instanceBean();
	}

	/**==================
	 *   讀取xml配置文件
	 * ==================
	 * @author Bin
	 * @param fileName
	 */
	private void readXml(String fileName) {
		SAXReader saxReader=new SAXReader();
		Document doucment=null;
		try {
			URL xmlPath=this.getClass().getClassLoader().getResource(fileName);
			doucment=saxReader.read(xmlPath);
			Map<String,String> nsMap=new HashMap<String,String>();
			//給spring配置文件的命名空間  一個別名 ns
			nsMap.put("ns","http://www.springframework.org/schema/beans"); //加入命名空間  xmlns: spring配置文件中的
			XPath xsub=doucment.createXPath("http://ns:beans/ns:bean"); //創(chuàng)建 beans/bean 查詢路徑
			
			xsub.setNamespaceURIs(nsMap); //設(shè)置命名空間
			List<Element> beans=xsub.selectNodes(doucment); //獲取文檔下的所有bean節(jié)點
			
			for (Element element : beans) {
				String id=element.attributeValue("id"); //獲取 id的屬性值
				String clazz=element.attributeValue("class"); // 獲取 class屬性

				//類是 spring中的 : org.springframework.beans.factory.config.BeanDefinition;
				BeanDefinition beandefine=new BeanDefinition(id,clazz);
				beandefines.add(beandefine);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**===================================
	 *   完成Bean 的實例化
	 * ===================================
	 * @author Bin
	 */
	private void instanceBean() {
		for (BeanDefinition beandefine : beandefines) {
			try {
				if(!Util.isEmptyString(beandefine.getClassName()))
					sigletons.put(beandefine.getId(), Class.forName(beandefine.getClassName().trim()).newInstance());
			}catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	/**=======================
	 *    獲取bean 
	 * =====================
	 * @param beanName
	 * @return
	 */
	public Object getBean(String beanName){
		return this.sigletons.get(beanName);
	}
	
}

  


11.好啦 我們來測試吧
    

	@Test  //測試 自定義的spring 模擬器
	public void testMySpring(){
		MySpringClassPathXmlApplicationContext ctx=new MySpringClassPathXmlApplicationContext("applicationContext.xml");
		//方法一  獲取服務(wù)層對象
		PersonService personService=(PersonService)ctx.getBean("personService");
		personService.save();
	}

  



//如果? 同樣看到? "我就是save方法!"? 我想 你應(yīng)該對spring有所了解了吧??? 嘻嘻
//睡覺啦 呵呵? 88

Spring 簡單應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美三级美国一级 | 国产精品拍自在线观看 | 99热精品成人免费观看 | 天天综合网天天做天天受 | 四虎a级欧美在线观看 | 99re6这里有精品热视频在线 | 亚洲第一红杏精品久久 | 国产一级αv片免费观看 | 99视频精品全部免费观看 | 在线观看99 | 欧美成人在线视频 | 日本不卡视频在线观看 | 欧美在线精品一区二区三区 | 五月花在线观看播放视频 | 米奇精品一区二区三区 | 久久国产香蕉视频 | 九九热精品国产 | 99精品在线观看 | 亚洲国产成人私人影院 | 国产一级毛片国语普通话对白 | 免费视频精品一区二区 | 亚洲欧美香蕉在线日韩精选 | 国产永久| 日本精品久久久久中文字幕 1 | 永久黄网站色视频免费观看 | se成人 | 久久精品国产午夜伦班片 | 色姑娘色综合 | 久久精品国产亚洲 | 特黄aa级毛片免费视频播放 | 五月婷婷激情综合 | 国产精品成人免费综合 | 狠狠色噜噜狠狠狠狠色综合网 | 精品一区二区三区免费视频 | 国产一区二区三区乱码网站 | 日本一二三区免费 | 欧美日韩中文在线观看 | 久久精品国产久精国产 | 久久精品成人免费网站 | 国产精品人成福利视频 | 伊人精品影院一本到欧美 |