- 浏览: 170037 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (90)
- [PDM系统] (1)
- java初学者应该懂的 (11)
- Java 中的finally你知多少? (1)
- JAVA中的引用到底是传值还是传址? (1)
- Tomcat 7启动异常 (1)
- JAVA IO总结 (1)
- Overriding 与 Overloading的区别 (1)
- Spring3.0新特性 (1)
- 【Struts2】 (11)
- 阐释Spirng (6)
- EJB与JAVA Bean的区别 (1)
- 异常备忘 (1)
- 邮件传输协议理解 (1)
- java与openssl以及private key文件生成密钥 (1)
- EL 隐式对象 (1)
- JSP (1)
- PHP (1)
- Python (1)
- Ruby (1)
- Perl概要及各自特点 (1)
- SQL Server小技巧 (6)
- 很好的博客 ,有很多好用的资料 (0)
- JAVA异常分类 (2)
- 面向对象的设计原则 (1)
- Java集合框架使用总结 (1)
- 如何理解面向对象思想 (0)
- Spring (1)
- 3DES加密 (1)
- Tomcat AJP Connector参数调整 (1)
- Linux下切分Tomcat的catalina.out日志文件 (1)
- mysql (1)
- Tomcat处理HTTP请求源码分析 (1)
- 6款常用的Java开源报表制作工具 (1)
- JavaScript中出现乱码的处理心得 (1)
- hibernate3.3.2与hibernate3.5.0 (1)
- hibernate心得 (4)
- 关于eclipse以及myeclipse (1)
- ubuntu (1)
- char、nvarchar和varchar区别 (1)
- javascript (1)
- Java语言学习六大要点 (1)
- Java之异常与错误的区别及java的异常体系 (1)
- JDBC 介绍 (1)
- JDBC组件 Druid (1)
- 10 个非常重要的 HotSpot JVM 参数 (1)
- Linux (1)
- Weblogic应用程序部署指南 (1)
- 书上没写的领导守则 (1)
- 产品经理-需求分析的六原则 (1)
- 客户与用户的区别 (1)
- 对MAXIMO的理解 (1)
- sql server 2005 (1)
- 通过pl/sql创建Oracle新用户 (1)
- Oracle笔记 (1)
- 配置管理的流程 (1)
- 人生经验九条与十淡 (1)
- 实施顾问 (2)
- 项目管理 (1)
- List----linq的集合运算 (1)
最新评论
-
Lightning_py:
不错,讲的挺好的。。。。。
实施顾问的八大建议!! -
nikalan:
总结很全面
abstract class 和interface 的区别
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
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依赖注入
2011-11-18 11:22 1032依赖注入和控制反转是同一个概念, 具体的含义是:当某个角色(可 ... -
配置Spring管理的bean的作用域
2011-11-18 11:22 1717<bean id="persionServic ... -
Spring实例化bean的三种方式
2011-11-18 11:22 711一:使用类构造器实例化 <bean id="p ... -
【Spring】手动添加schema文件
2011-11-18 11:23 912由于spring的schema文件位于网络上,如果机器不能连接 ... -
阐释Spirng(入门)
2011-11-17 16:05 988Spring是一个开源的控制 ...
相关推荐
通过分析这个示例,你可以更好地理解Spring自动扫描和管理Bean的工作原理,以及如何在实际项目中应用这些概念。 总结起来,Spring的自动扫描和管理Bean功能是通过组件扫描和注解驱动配置实现的,这大大减少了手动...
本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)原理,这两个概念是Spring框架的核心。 **控制反转(IoC...
这个压缩包文件“spring管理bean应用实例代码”显然包含了关于如何在Spring中配置和使用Bean的示例代码。接下来,我们将深入探讨Spring管理Bean的相关知识点。 1. **Spring Bean的定义** Spring中的Bean是指由...
在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配。Bean配置是定义这些对象如何被创建和如何相互关联的过程。 **IoC(Inversion of Control)和DI(Dependency Injection)**: IoC是...
在Spring1-1这个文件中,可能包含了关于这些概念的示例代码和详细教程,帮助开发者深入理解和掌握Spring中的Bean管理。学习和熟练运用这些知识,将对提升Java EE应用的开发效率和质量大有裨益。
综上所述,Spring 的依赖注入和 Bean 管理不仅限于 Web 应用,也可以方便地应用于 Java Application 中,通过 XML 或注解配置来实现组件间的解耦,提高代码质量。这个示例项目 `test` 可能包含了实现上述功能的代码...
在Spring框架中,Bean的配置与管理是其核心功能之一,而通过`PropertyPlaceholderConfigurer`进行属性占位符的配置则是实现动态配置的关键技术。本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置...
在提供的“BeanTest”文件中,我们可以预期看到一个简单的Spring Bean配置和测试示例。通常,这将包括以下部分: 1. **Bean定义**:Bean定义是Spring容器如何创建和管理Bean的描述。它可以是一个XML配置文件中的...
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...
在Spring框架中,Bean的作用域是管理Bean实例创建和存活范围的重要概念。Bean的作用域决定了在特定上下文中,Spring容器如何管理和提供Bean的实例。在Spring中,有五种主要的Bean作用域: 1. **Singleton作用域**:...
总结,"Spring整合RestEasy示例工程源码"展示了如何在Spring环境中利用RestEasy创建RESTful服务,同时利用Spring的IoC和AOP特性优化服务管理。这个示例有助于开发者理解这两个强大框架的融合,以及如何在实际项目中...
在示例代码中,可以看到如何定义Bean配置,以及如何通过@Autowired注解实现自动装配。 2. **AOP(Aspect Oriented Programming)**:Spring提供了面向切面编程的实现,允许开发者定义横切关注点,如日志、事务管理...
在Spring框架中,Bean装配是核心功能之一,它负责初始化、配置和管理应用程序中的对象。本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和...
- **功能概述**:`<beans>`是Spring配置文件的根元素,用来包含一个或多个`<bean>`元素,用于定义Spring容器管理的各种Bean。 #### 二、`<bean>`元素详解 - **基础配置**: - **`class`属性**:表示JavaBean的全...
3. `appcontext.xml` - 这是Spring的配置文件,通常用于定义bean的声明、依赖关系以及事务管理等。在这个文件中,可能会配置Spring的Quartz支持,包括创建`SchedulerFactoryBean`,设置Quartz的配置属性,以及定义...
在本文中,我将讨论棘手的Spring Boot bean定义覆盖机制。 为了使您对该主题更加清楚,让我们从小测验开始。请看下一个简单的例子。 因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅...
3. **Bean的生命周期管理**:Spring容器可以管理Bean的完整生命周期,包括初始化、使用和销毁。开发者可以定义初始化方法和销毁方法,也可以通过`@PostConstruct`和`@PreDestroy`注解标记。测试类会验证这些生命周期...
这个"spring mvc官方示例"包含了基于注解的Spring MVC应用的演示,可以帮助我们深入理解如何在实际开发中使用Spring MVC。下面将详细阐述Spring MVC的核心概念和关键特性,以及基于注解的编程方式。 1. **Spring ...