美文网首页
Spring学习笔记(一)-项目搭建与初始化过程详解

Spring学习笔记(一)-项目搭建与初始化过程详解

作者: G__yuan | 来源:发表于2019-07-10 18:37 被阅读0次

1.搭建工程:

(1).Spring所需的jar:

(2).编写XXX.xml文件(下面以编写beans.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"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="personService" class="com.gaoyuan.service.impl.PersonServiceImpl"/>

</beans>

(3).实例化spring容器

Java代码:

通过以上几步,就简单的将bean对象实例化了通过spring容器,从而在java代码中省略了new来实例化对象。

(4).编码剖析Spring管理Bean的原理

BeanDefinition.java

package com.gaoyuan.junit.test;

/**

 * 存放xml文件中配置的bean

 * @author G_yuan

 *

 */

public class BeanDefinition {

private String id;

private String clazz;

public BeanDefinition(String id, String clazz) {

this.id = id;

this.clazz = clazz;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getClazz() {

return clazz;

}

public void setClazz(String clazz) {

this.clazz = clazz;

}

}

ClassPathXMLApplicationContext.java

/**

 * 模拟spring是如何读取beans.xml文件的

 * @author G_yuan

 */

package com.gaoyuan.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;

/**

 * 模拟spring是如何读取beans.xml文件的

 * @author G_yuan

 *

 */

public class ClassPathXMLApplicationContext {

List<BeanDefinition> beanDefins = new ArrayList<BeanDefinition>();

Map<String,Object> sigletons = new HashMap<String,Object>();

/**

 * 完成bean的实例化

 * @param fileName

 * @throws ClassNotFoundException

 * @throws IllegalAccessException

 * @throws Exception

 */

private void instanceBean() throws Exception{

for(BeanDefinition be :beanDefins){

if(be.getClazz()!=null && !"".equals(be.getClazz().trim()) ){

sigletons.put(be.getId(), Class.forName(be.getClazz()).newInstance());

}

}

}

/**

 * 类初始化时的要加载xml文件和实例化xml文件中配置的bean

 * @param fileName

 * @throws Exception

 */

public ClassPathXMLApplicationContext(String fileName) throws Exception{

this.readXML(fileName);

this.instanceBean();

}

/**

 * 读取xxxBean.xml文件

 * @param fileName

 */

private void readXML(String fileName) {

SAXReader saxReader = new SAXReader();

Document document = null;

try {

URL xmlPath = this.getClass().getClassLoader().getResource(fileName);

document = saxReader.read(xmlPath);

Map<String , String> nsMap = new HashMap<String, String>();

nsMap.put("ns", "http://www.springframework.org/schema/beans");//加入命名空间

XPath xsub = document.createXPath("//ns:beans/ns:bean");//创建beans/bean的查询路径

xsub.setNamespaceURIs(nsMap);//设置命名空间

List<Element>  beans = xsub.selectNodes(document); //获取文档下的所有bean节点

for(Element element : beans){

String id = element.attributeValue("id");

String clazz = element.attributeValue("class");

BeanDefinition beanDefinition = new BeanDefinition(id, clazz);

beanDefins.add(beanDefinition);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

 * 模拟ClassPathXmlApplicationContext中的getBean()方法。

 * @param beanName

 * @return

 */

public Object getBean(String beanName){

return this.sigletons.get(beanName);

}

}

以上是一种获取bean的方法,并且也是常用的获取bean的方法,spring中有三种获取bean的方法,如:

(5).Bean的作用域

通过上面的方法获取bean时,获取的bean是同一个对象,如果想获取新的实例,需要在xml文件中配置 scope="prototype",如下:

<bean id="personService" class="com.gaoyuan.service.impl.PersonServiceImpl" scope="prototype"/>

(6).想要在bean实例化之前和在销毁的时候,做点事情的话,进行下面的操作:

1.首先需要在bean.xml中的bean标签中如图配置init-method="init"属性和destroy-method="destroy"属性。

2.在对应的XXXXServiceImpl.java中编写对应的init方法和destroy方法。

3.在执行destroy方法时,需要用到AbstractApplicationContext抽象类中的close()方法,才可以调用XXXXServiceImpl.java中的destroy方法


相关文章

网友评论

      本文标题:Spring学习笔记(一)-项目搭建与初始化过程详解

      本文链接:https://www.haomeiwen.com/subject/sakkkctx.html