`
DynamicMan
  • 浏览: 25475 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

2.装配bean(一)

 
阅读更多

        创建应用对象之间协作的行为,称为装配,其实质是spring容器建立bean之间关系依赖的过程。spring提供两种方式来进行创建,基于XML的配置与基于注解的配置。

        在spring中有两种容器,一种为beanFactory,是所有容器的父级,第二种为ApplicationContext,ApplicationContext拥有一些特定的功能,比beanFactory更加丰富,除非有特定的情况,一般考虑用ApplicationContext作为容器,另外beanFactory是延迟加载,即当第一次使用bean的时候才进行加载,而applicationContext是初始化就加载,在容器启动时候有利于检验bean的错误。

 

        以下是spring XML配置文件中的10个命名空间:

命名空间 用途
aop 为声明切面以及@AspectJ注解的类代理为spring切面提供了配置元素
beans 支持声明bean和装配bean,是spring最核心和最原始的命名空间
context 为配置spring应用上下文提供了配置元素,包括自动检测和自动装配bean,注入非spring直接管理的对象
jee 提供了与java EE API的集成,例如EJB和JNDI
jms 为声明消息驱动的POJO提供了配置元素
lang 支持配置由groovy,Jruby或者beanSheel等脚本实现的bean
mvc 启动spring MVC的能力,例如面向注解的控制器,视图控制器和拦截器
oxm 支持spring的对象到xml的映射配置
tx 提供声明式事务配置
util 提供各种各样的工具类元素,包括把集合配置为bean,支持属性占位符

 

        最基础的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"
	xsi:schemaLocation="
		   http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


</beans>

 

 

声明一个bean:

 

package org.robbie.test.spring.inf;

import org.robbie.test.spring.exception.PerformerException;

public interface Performer {
	
	void perform() throws PerformerException;
	
}

 

package org.robbie.test.spring.beans;

import org.robbie.test.spring.exception.PerformerException;
import org.robbie.test.spring.inf.Performer;

public class Juggler implements Performer{
	
	private int beanBags = 3;
	
	public Juggler() {}
	
	public Juggler(int beanBags){
		this.beanBags = beanBags;
	}
	

	@Override
	public void perform() throws PerformerException {
		System.out.println("Juggling " + beanBags + " Beanbags");
	}

}

 

<?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-3.0.xsd">

	
	<bean id="duke" class="org.robbie.test.spring.beans.Juggler">
		
	</bean>
	
</beans>

 

package org.robbie.test.spring;

import org.robbie.test.spring.beans.Juggler;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTest {

	public static void main(String[] args) throws Exception {
		ApplicationContext context = new ClassPathXmlApplicationContext("spring/basic.xml");
		Juggler juggler = (Juggler)context.getBean("duke");
		juggler.perform();
	}
	
}

 通过构造器注入:

 

 

<?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-3.0.xsd">

	
	<bean id="duke" class="org.robbie.test.spring.beans.Juggler">
		<constructor-arg value="5"></constructor-arg>
	</bean>
	
</beans>

 如果有多个参数,通过index属性标识位置,下标从0开始

 

 

通过构造器注入对象引用:

 

package org.robbie.test.spring.inf;

public interface Poem {
	
	void recite();
}

 

package org.robbie.test.spring.beans;

import org.robbie.test.spring.inf.Poem;

public class Robbie implements Poem{

	@Override
	public void recite(){
		System.out.println("recite poem !!");
	}

}

 

<?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-3.0.xsd">

	
	<bean id="duke" class="org.robbie.test.spring.beans.Juggler">
		<constructor-arg value="5"></constructor-arg>
		<constructor-arg ref="robbie"></constructor-arg>
	</bean>
	<bean id="robbie" class="org.robbie.test.spring.beans.Robbie"></bean>
	
</beans>

 通过工厂方法创建:

 

 

package org.robbie.test.spring.beans;

public class Stage {
	
	private Stage(){}
	
	private static class StageSingletonHolder{
		static Stage instance = new Stage();
	}
	
	public static Stage getInstance(){
		return StageSingletonHolder.instance;
	}
}

 注意:该类中用到了延迟实例化创建单例,并考虑线程同步问题。

 

 

<?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-3.0.xsd">

	

	
	<bean id="stage" class="org.robbie.test.spring.beans.Stage" factory-method="getInstance"></bean>
	
</beans>

 如果要用其他工厂(spring bean)进行创建,则需要配置factory-bean

 

 

<?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-3.0.xsd">

	

	
	<bean id="stage" factory-method="getInstance" factory-bean="XXXXXBean"></bean>
	
</beans>

 bean的作用域:

 

作用域 定义
singleton 在每一个Spring容器当中,一个Bean定义只有一个对象实例(默认)
prototype 允许bean的定义可以被实例化任意次(每次调动都创建一个实例)
request

在一次HTTP请求当中,每个Bean定义对应一个实例,该作用域只在基于web的spring上下文中(例如spring mvc)有效

session 在一次HTTP session当中,每个Bean定义对应一个实例,该作用域只在基于web的spring上下文中(例如spring mvc)有效
global-session 在一个全局的HTTP-session中,每个bean定义对应一个实例,该作用域只在portlet上下文中有效

 

初始化和销毁bean:

<?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-3.0.xsd">

	
	<bean id="testBean" class="test.bean" init-method="initMethod" destroy-method="destroyMethod">
	</bean>
	
</beans>

 配置init-method和destroy-method属性调用不同方法在bean创建和销毁时进行方法回调。如果是全局的在某个配置文件上都需要用同样的方法来处理初始化和销毁,则可以进行全局配置:

<?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-3.0.xsd" 
           default-init-method="initMethod" default-destroy-method="destroyMethod">
</beans>

 

 

分享到:
评论

相关推荐

    spring装配bean实例代码

    本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和注解配置。在本例中,我们将重点关注XML配置,对应的压缩包文件名为“springxmldemo”,...

    基于java的企业级应用开发:Bean的装配方式.ppt

    5. **@Autowired** - 自动装配Bean,可以根据类型或名称进行匹配。 6. **@Resource** - 类似于@Autowired,但更侧重于根据名称来装配。 7. **@Qualifier** - 当有多个相同类型的Bean时,可以通过指定名称进行精确...

    第四章 在Ioc容器中装配Bean

    在探讨Spring 3.X企业应用开发过程中,第四章的内容聚焦于如何在Spring框架的核心组件——IoC(控制反转)容器中装配Bean。在Spring框架中,Bean装配是指Spring容器将应用程序中的对象进行实例化、配置以及组装的...

    动态的装配bean,注入到Controller中

    在Spring框架中,动态装配bean并将其注入到Controller中是一种常见的需求,这允许我们根据运行时的条件或配置来创建和管理对象。本篇将详细解释两种实现方式:基于XML配置和使用`@PostConstruct`注解。 首先,让...

    基于框架的Web开发-装配Bean自动装配.doc

    Spring通过组件扫描(Component Scanning)和自动装配(Autowiring)来实现这一目标,使得开发者无需手动配置大部分bean的依赖关系。 首先,我们来看组件扫描。组件扫描允许Spring容器自动发现应用上下文中创建的...

    spring bean XML配置入门

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

    spring装配bean的3种方式总结

    Spring装配Bean的3种方式总结 Spring框架是Java EE应用程序的核心框架之一,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等功能。依赖注入是Spring框架的核心...

    Spring自动装配Bean实现过程详解

    Spring自动装配Bean实现过程详解 Spring框架提供了自动装配Bean的功能,该功能可以根据Bean的属性名称或类型自动将Bean装配到其他Bean中,从而简化了Bean的配置工作。在本文中,我们将详细介绍Spring自动装配Bean...

    Spring4--2.bean注解和AOP

    3. `@Autowired`:这个注解用于自动装配Bean的依赖。Spring会根据类型或名称找到合适的Bean进行注入。例如: ```java @Service public class MyService { @Autowired private MyDependency myDependency; // ... ...

    spring入门学习-3、Bean装配(XML).pdf

    6. **Autowiring-mode**:定义了如何自动装配Bean。Spring支持按类型、按名称等多种自动装配模式。 7. **Lazy-initialization-mode**:懒加载模式,表示Bean是否在容器启动时立即创建,还是在首次请求时创建。 8. ...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了Bean的生命周期和作用域的管理方式。 一、...

    spring boot中的条件装配bean的实现

    在 Spring Boot 框架中,条件装配 Bean 是一种非常重要的机制,它允许在 Bean 装配时增加前置条件判断。这种机制从 Spring Framework 3.1 开始引入,目的是为了提供一种更加灵活和智能的 Bean 装配方式。在本文中,...

    装配bean—集合类型注入值源码

    装配bean——集合类型注入值: 本文介绍数组、list集合、set集合、map集合、properties的注值 博客原文地址:http://blog.csdn.net/tingzhiyi/article/details/52104203

    JavaEE 使用注解配置Bean的一个示例

    3. **@Autowired** 注解:这个注解用于自动装配Bean的依赖。Spring容器会根据类型或者名称找到匹配的Bean,将其注入到标注的字段或方法中。例如: ```java @Service public class UserService { @Autowired ...

    SpingIOC注入实例化bean

    2. **实例化bean** Spring容器提供多种实例化bean的方式: - **默认实例化**:如果bean没有指定构造函数,Spring会使用默认无参构造函数创建bean。 - **构造函数注入**:可以通过指定构造函数参数,Spring会调用...

    day38 16-Spring的Bean的装配:注解的方式

    以上就是Spring使用注解方式装配Bean的基本过程和关键注解的介绍。通过这种方式,我们可以轻松地管理Bean的生命周期,实现依赖注入,以及对Bean的其他配置,极大地提高了代码的可维护性和灵活性。在实际项目中,结合...

    Spring装配bean方法实例总结

    自动装配是Spring框架中的一种重要特性,它可以自动发现和装配bean。自动装配有两种方式,一种是组件扫描,另一种是自动化管理bean之间的依赖关系。 2.1 组件扫描 组件扫描是指Spring框架自动扫描并发现bean的过程...

    粗略实现spring创建bean

    2. Spring Bean 的配置方式 - XML配置:传统的Spring配置方式,通过`&lt;bean&gt;`标签定义Bean的属性和依赖关系。 - 注解配置:使用如`@Component`、`@Service`、`@Repository`、`@Controller`等注解标记Bean,再通过`@...

    在Spring中自动装配Bean的属性

    在 Spring 框架中,自动装配 Bean 的属性是非常重要的一部分,今天我们将为大家分享关于在 Spring 中自动装配 Bean 的属性的知识。 首先,Spring 的最基本的能力就是 DI,即依赖注入,或控制反转,它可以为 Bean ...

    Spring--2.Spring 中的 Bean 配置-2-1

    在Spring框架中,Bean配置是核心概念之一,它关乎到对象的创建、初始化、装配以及管理。本节我们将深入探讨Spring中的Bean配置,主要聚焦在XML配置方式,因为这是Spring早期版本中最常用的方式,尽管在现代Spring...

Global site tag (gtag.js) - Google Analytics