`
run_wang
  • 浏览: 170037 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Spirng管理bean示例

阅读更多
1:新建一个JAVA工程 SpringDemo
2:为SpringDemo工程导入Spring2.5核心jar,并在在src目录下建立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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


</beans>
3:建立单元测试类 Junit 4 Test 测试Spring环境的搭建是否成功
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class SpringTest {
@Test
public void getInstanceSpring(){
  ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
}
}
4:新建一个普通业务Bean
package com.xinyang.services.impl;

import com.xinyang.services.PersionService;


public class PersionServiceBean implements PersionService {
/* (non-Javadoc)
  * @see com.xinyang.services.impl.PersionService#set()
  */
public void set()
{
   System.out.println("Sprng第一个应用");
}
}
对已有的方法抽取接口:OersuibService(通过Eclipse先导实现) 业务类-->Refactor-->Extract Interface(抽取接口)
当然接口和实现类最好不要同一目录下 通过 名称-->Refactor-->Move 到具体的某个包中
5 :更改配置文件 把业务Bean交给Spring管理
<bean id="persionService" class="com.xinyang.services.impl.PersionServiceBean"></bean>
6:更改单元测试类,在Spring容器中获取业务Bean并通过其接口对其引用

public class SpringTest {
@Test
public void getInstanceSpring(){
  ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
  PersionService  persionService=(PersionService)ctx.getBean("persionService");
  persionService.set();
}
}
以上实现如何把bean交给Spirng容器进行管理,并从Spring容器中获取Bean实例

7:创建一个类,模拟Spring容器利用dom4j读取Spring配置文件
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;

/***
*
* @author Administrator
*
*/

public class ClassPathXMLApplicationContext {
private List<BeanDefinition> beanDefines =new ArrayList<BeanDefinition> ();


//通过名称取得实例
private Map<String,Object> sigletons=new HashMap<String, Object>();
/***
  * 模拟spring内部实现 首先要读取spring配置文件
  * 一:读取xml配置文件readXML();
  * 二:通过反射机制 实例化bean对象
  *
  */
public ClassPathXMLApplicationContext(String filename){
  //读取配置文件
  this.readXML(filename);
  this.instanceBeans();
}
/**
  * 完成bean的实例化
  */
private void instanceBeans() {
  // TODO Auto-generated method stub
//因为首先执行this.readXML(filename)这个方法 ,所以它会把xml配置信息读取并出入至beanDefines集合里
  for(BeanDefinition beanDefinition : beanDefines){
   try {
    if(beanDefinition.getClassName()!=null &&!"".equals(beanDefinition.getClassName().trim()))
    sigletons.put(beanDefinition.getId(), Class.forName(beanDefinition.getClassName()).newInstance());
 
   } catch (Exception e) {
    // TODO Auto-generated catch blocksssss
    e.printStackTrace();
   }
  }
 
}
/***
* 读取xml配置文件
* @param filename
*/
private void readXML(String filename) {
  // TODO Auto-generated method stub
  //创建一个读取器
  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");//加入命名空间
   //要读取的内容是bean元素里面的内容 它会从根节点开始找 首先是beans->bean
   //beans 节点所在的命名空间 在ns(http://www.springframework.org/schema/beans)中,所以需加上命名空间前缀  通过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");//获取id属性
    String clazz=element.attributeValue("class");//获取class属性
    BeanDefinition beanDefine=new BeanDefinition(id,clazz);
    beanDefines.add(beanDefine);
   }
  
  }catch(Exception e){
   e.printStackTrace();
  }
}
/**
  * 获取bean实例
  * @param beanName
  * @return  Object
  */
public Object getBean(String beanName){
  return this.sigletons.get(beanName);
}

}
8:创建一个javaBean  BeanDefinition用于存放读取bean的信息
package junit.test;

public class BeanDefinition {
private String id;
private String className;
public BeanDefinition(String id, String className) {
  super();
  this.id = id;
  this.className = className;
}
public String getId() {
  return id;
}
public void setId(String id) {
  this.id = id;
}
public String getClassName() {
  return className;
}
public void setClassName(String className) {
  this.className = className;
}

}

9:更改测试测试类
ClassPathXMLApplicationContext ctx=new ClassPathXMLApplicationContext("applicationContext.xml");
   SpringService services=(SpringService)ctx.getBean("persionService");
  services.set();


package junit.test;


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

import com.xinyang.services.SpringService;
public class SpringTest {

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test
public void instanceSpring(){
 
  ClassPathXMLApplicationContext ctx=new ClassPathXMLApplicationContext("applicationContext.xml");
   SpringService services=(SpringService)ctx.getBean("persionService");
  services.set();
  
}

}

这样测试的结果
java.lang.NoClassDefFoundError: org/jaxen/JaxenException
  XPath xsub=document.createXPath("//ns:beans/ns:bean");显示这段代码有问题
这时需导入:jaxen-1[1].1-beta-6.jar
分享到:
评论

相关推荐

    spring自动扫描和管理Bean的示例

    通过分析这个示例,你可以更好地理解Spring自动扫描和管理Bean的工作原理,以及如何在实际项目中应用这些概念。 总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动...

    spring创建bean简单示例

    本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...

    spring管理bean应用实例代码

    这个压缩包文件“spring管理bean应用实例代码”显然包含了关于如何在Spring中配置和使用Bean的示例代码。接下来,我们将深入探讨Spring管理Bean的相关知识点。 1. **Spring Bean的定义** Spring中的Bean是指由...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。

    Spring的Bean配置

    在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配。Bean配置是定义这些对象如何被创建和如何相互关联的过程。 **IoC(Inversion of Control)和DI(Dependency Injection)**: IoC是...

    spring中的bean

    在Spring1-1这个文件中,可能包含了关于这些概念的示例代码和详细教程,帮助开发者深入理解和掌握Spring中的Bean管理。学习和熟练运用这些知识,将对提升Java EE应用的开发效率和质量大有裨益。

    spring依赖注入bean

    综上所述,Spring 的依赖注入和 Bean 管理不仅限于 Web 应用,也可以方便地应用于 Java Application 中,通过 XML 或注解配置来实现组件间的解耦,提高代码质量。这个示例项目 `test` 可能包含了实现上述功能的代码...

    SPRING:bean配置properties

    在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...

    Spring Bean简单应用实例

    在提供的“BeanTest”文件中,我们可以预期看到一个简单的Spring Bean配置和测试示例。通常,这将包括以下部分: 1. **Bean定义**:Bean定义是Spring容器如何创建和管理Bean的描述。它可以是一个XML配置文件中的...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...

    spring的bean作用域

    在Spring框架中,Bean的作用域是管理Bean实例创建和存活范围的重要概念。Bean的作用域决定了在特定上下文中,Spring容器如何管理和提供Bean的实例。在Spring中,有五种主要的Bean作用域: 1. **Singleton作用域**:...

    Spring整合RestEasy示例工程源码

    总结,"Spring整合RestEasy示例工程源码"展示了如何在Spring环境中利用RestEasy创建RESTful服务,同时利用Spring的IoC和AOP特性优化服务管理。这个示例有助于开发者理解这两个强大框架的融合,以及如何在实际项目中...

    spring3.0官方示例代码

    在示例代码中,可以看到如何定义Bean配置,以及如何通过@Autowired注解实现自动装配。 2. **AOP(Aspect Oriented Programming)**:Spring提供了面向切面编程的实现,允许开发者定义横切关注点,如日志、事务管理...

    spring装配bean实例代码

    在Spring框架中,Bean装配是核心功能之一,它负责初始化、配置和管理应用程序中的对象。本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和...

    Spring的Bean配置说明

    - **功能概述**:`&lt;beans&gt;`是Spring配置文件的根元素,用来包含一个或多个`&lt;bean&gt;`元素,用于定义Spring容器管理的各种Bean。 #### 二、`&lt;bean&gt;`元素详解 - **基础配置**: - **`class`属性**:表示JavaBean的全...

    spring quartz 整合示例

    3. `appcontext.xml` - 这是Spring的配置文件,通常用于定义bean的声明、依赖关系以及事务管理等。在这个文件中,可能会配置Spring的Quartz支持,包括创建`SchedulerFactoryBean`,设置Quartz的配置属性,以及定义...

    Spring Boot: Bean definition overriding

    在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...

    SpringIoc示例代码

    3. **Bean的生命周期管理**:Spring容器可以管理Bean的完整生命周期,包括初始化、使用和销毁。开发者可以定义初始化方法和销毁方法,也可以通过`@PostConstruct`和`@PreDestroy`注解标记。测试类会验证这些生命周期...

    spring mvc官方示例

    这个"spring mvc官方示例"包含了基于注解的Spring MVC应用的演示,可以帮助我们深入理解如何在实际开发中使用Spring MVC。下面将详细阐述Spring MVC的核心概念和关键特性,以及基于注解的编程方式。 1. **Spring ...

Global site tag (gtag.js) - Google Analytics