`

spring学习笔记--bean的配置

阅读更多

构造器方式注入

Performer.java文件:

package com.springinaction.springidol;


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

 PerformanceException.java:

package com.springinaction.springidol;

public class PerformanceException extends Exception {

	
	public PerformanceException() {
		
	}
	
	public PerformanceException(String str) {
		super(str);
	}
}

 

一:简单值的注入

Juggler.java:这个是等会要进行注入配置的java文件,他有beanBags,name两个属性,并都有自己的默认值。

package com.springinaction.springidol;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private int beanBags = 3;
	private String name = "default";
	
	public Juggler(int beanBags,String name) {
		this.beanBags = beanBags;
		this.name = name;
	}
	
	public Juggler() {
	}
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags");
		
	}

}

 接下来才是比较激动人心的时刻了,bean文件的配置,名称为spring-idol.xml文件,位置跟前面的java文件在同一个包中。

construtor-arg中的属性:name用来配置对应javabean中属性的名称,value用来配置javabean中简单属性类型的值,ref用来配置javabean中引用类型的值,index用来制定将某个值配置到javabean中构造方法对应顺序位置的值,type用来指定即将转换到javabean中的类型。

 

 

<?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.xsd" >
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<!-- name表示属性的名称,value为属性的值 -->
    	<constructor-arg name="beanBags" value="13"/>
    	<constructor-arg name="name" value="duke"/>
    </bean> 
</beans>

 

二:注入对象

假设Juggler类中存在一个Instructment对象

Instructment.java

 

package com.springinaction.springidol;

public class Instructment {

	private String name;

	public Instructment(String name) {
		this.name = name;
	}
	public void sayName() {
		System.out.println("Instructment has name=" +name );
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.name;
	}
}

 

 Juggler.java

 

 

 

 

package com.springinaction.springidol;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private String name = "default";
	private int beanBags = 3;
	private Instructment instructment;
	
	public Juggler(String name, int beanBags, Instructment instructment) {
		super();
		this.name = name;
		this.beanBags = beanBags;
		this.instructment = instructment;
	}
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----" + instructment);
		
	}

}

 

spring-idol.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.xsd" >
        
    <bean name="instructment" class="com.springinaction.springidol.Instructment">
    	<constructor-arg name="name" value="instruct"/>
    </bean>   
        
     
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<constructor-arg name="beanBags" value="15"/>
    	<constructor-arg name="name" value="duke"/>
    	<constructor-arg name="instructment" ref="instructment"/>
    </bean> 
</beans>

 三:注入集合

Juggler.java:

package com.springinaction.springidol;

import java.util.Collection;



public class Juggler implements Performer {

	private String name = "default";
	private Collection<Integer> beanBags;
	public Juggler(String name, Collection<Integer> beanBags) {
		super();
		this.name = name;
		this.beanBags = beanBags;
	}

	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----");
		
	}

}

 spring-idol.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.xsd" >
     
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<constructor-arg name="name" value="duke"/>
    	<constructor-arg name="beanBags">
    		<list>
    			<value>1</value>
    			<value>2</value>
    			<value>3</value>
    		</list>
    	</constructor-arg>
    </bean> 
</beans>

 

注:这里只是介绍了集合一种比较简单的使用方式,对于map使用方式跟list差不多,只是对应的子元素为entry,entry元素中使用key与value两个属性进行赋值;对于集合中是集合或者对象的情况可以根据xml文件的提示使用对应的方式进行赋值即可,这里不再记录了。

 

 通过setter方式注入

Performer.java与 PerformanceException.java文件同上

一:简单值的注入

Juggler.java:

 

package com.springinaction.springidol;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private String name = "default";
	private int beanBags = 3;
	
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags");
		
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setBeanBags(int beanBags) {
		this.beanBags = beanBags;
	}

}

 

spring-idol.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.xsd" >
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<property name="beanBags" value="13" />
    	<property name="name" value="duke"/>
    </bean> 
</beans>

 

:对象的注入

Instructment.java:

 

package com.springinaction.springidol;

public class Instructment {

	private String name;

	
	public void setName(String name) {
		this.name = name;
	}

	public void sayName() {
		System.out.println("Instructment has name=" +name );
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return this.name;
	}
}

 

 

 

 

 

Juggler.java:

 

package com.springinaction.springidol;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private String name = "default";
	private int beanBags = 3;
	private Instructment instructment;
	
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----" + instructment);
		
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setBeanBags(int beanBags) {
		this.beanBags = beanBags;
	}

	public void setInstructment(Instructment instructment) {
		this.instructment = instructment;
	}
	
	

}

 

 spring-idol.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.xsd" >
    <bean name="instructment" class="com.springinaction.springidol.Instructment">
    	<property name="name" value="instruct"></property>
    </bean> 
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<property name="beanBags" value="15" />
    	<property name="name" value="duke" />
    	<property name="instructment" ref="instructment"></property>
    </bean> 
</beans>

 :集合的注入

Juggler.java:

package com.springinaction.springidol;

import java.util.Collection;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private String name = "default";
	private Collection<Integer> beanBags;
	
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----");
		
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setBeanBags(Collection<Integer> beanBags) {
		this.beanBags = beanBags;
	}
}

 spring-idol.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.xsd" >
    <bean name="duke" class="com.springinaction.springidol.Juggler">
    	<property name="name" value="duke" />
    	<property name="beanBags">
    		<list>
    			<value>1</value>
    			<value>2</value>
    			<value>3</value>
    		</list>
    	</property>
    </bean> 
</beans>

 到这里spring bean的xml文件注入方式基本上就记录完毕了,下面将记录bean的作用域问题。

bean的作用域

1.spring默认所有的bean都是单例的,当容器分配一个bean(不论通过装配还是调用容器的getBean方法),他总是返回bean的一个实例。那如何配置Spring让其覆盖默认的单例配置呢?

spring在bean元素中为我们提供了scope属性,通过设置这个属性的值为prototype就可以在每次请求的时候都会产生一个实例了。具体实现:

 

<bean name="duke" class="com.springinaction.springidol.Juggler" scope="prototype">

 

 scope属性还有以下几个值:

singleton 在每一个Spring容器中,一个bean定义只有一个对象实例(默认)

 

prototype 允许bean的定义可以被实例化任意次(每次调用都会产生一个实例)

request  在一次http请求中,每个bean定义对应一个实例,该作用域仅在基于web的spring上下文(SpringMvc)中才有效

session  在一个http session中,每个bean定义对应一个实例,该作用域仅在基于web的spring上下文(SpringMvc)中才有效

global-session  在一个全局http session中,每个bean定义对应一个实例,该作用域仅在PortLet上下文中才有效

 

 

 2.bean的初始化与销毁

在bean元素中可以设置bean的初始化与销毁的方法,具体的做法如下:

 

package com.springinaction.springidol;

import java.util.Collection;

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;

public class Juggler implements Performer {

	private String name = "default";
	private Collection<Integer> beanBags;
	public void myInit() {
		System.out.println("dosomething here to init bean");
	}
	public void myDestory() {
		System.out.println("dosomething here to destory bean");
	}
	public void perform() throws PerformanceException {
		System.out.println(name+"--Juggling--" + beanBags +"...beanBags is show-----");
		myDestory();//执行销毁当前bean
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setBeanBags(Collection<Integer> beanBags) {
		this.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.xsd" >
    <bean name="duke" class="com.springinaction.springidol.Juggler" 
    	  scope="prototype"
    	  init-method="myInit"
    	  destroy-method="myDestory">
    	<property name="name" value="duke" />
    	<property name="beanBags">
    		<list>
    			<value>1</value>
    			<value>2</value>
    			<value>3</value>
    		</list>
    	</property>
    </bean> 
</beans>

 

 当然还可以配置全局的初始化以及销毁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.xsd" 
        default-init-method="myInit"
        default-destroy-method="myDestory"
        >
    <bean name="duke" class="com.springinaction.springidol.Juggler" 
    	  scope="prototype">
    	<property name="name" value="duke" />
    	<property name="beanBags">
    		<list>
    			<value>1</value>
    			<value>2</value>
    			<value>3</value>
    		</list>
    	</property>
    </bean> 
</beans>

 

 测试类:

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

import com.springinaction.springidol.PerformanceException;
import com.springinaction.springidol.Performer;


public class Test {
	public static void main(String[] args) throws PerformanceException {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml");
		Performer performer = (Performer)ctx.getBean("duke");
		performer.perform();
	}
}

 

 

分享到:
评论

相关推荐

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    Sping学习笔记(2)----实例化Bean的三种方式

    这篇“Spring学习笔记(2)----实例化Bean的三种方式”着重讲解了如何在Spring应用上下文中初始化Bean。以下是这三种方式的详细说明: 1. **XML配置方式** 在早期的Spring版本中,XML配置是最常见的实例化Bean的...

    Spring学习笔记(9)----让Spring自动扫描和管理Bean

    在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式配置每个Bean,而是通过指定包路径来让Spring自动发现和管理Bean。本文将深入探讨这个主题,帮助你更好地理解和应用这一功能。 首先,让...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    SSH笔记-依赖、继承bean的配置

    在提供的“SSH笔记-依赖、继承bean的配置”中,我们将重点讨论两种在XML配置中处理依赖和bean继承的方法:`parent`属性和`depends-on`属性。 首先,`parent`属性用于定义bean的继承关系。在Spring中,一个bean可以...

    尚学堂Spring学习笔记

    本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在MyEclipse中编写Spring配置...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    spring-boot学习笔记

    ### Spring Boot 学习笔记知识点总结 #### 一、Spring发展史 - **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring自学笔记-Ioc(控制反转)容器

    ### Spring自学笔记-Ioc(控制反转)容器 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用。它提供了一种轻量级的方式来管理应用程序的各种组件和服务,使得开发者能够更容易地构建...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    SSH学习笔记--整理.rar

    最后,“Spring学习笔记(马士兵spring视频笔记).doc”涵盖了Spring框架的关键内容。Spring是一个全面的企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、数据访问、Web应用、事务管理等多种功能。笔记中...

    spring-framework-5.2.3.RELEASE.rar

    这些文档通常包括API参考、用户指南和开发者笔记,是学习和解决问题的重要资源。 为了快速搭建Spring Framework,你需要做以下几步: 1. **解压文件**:首先,解压缩"spring-framework-5.2.3.RELEASE.rar",获取所...

    Spring学习笔记(10)----公共属性的注入配置

    在Spring框架的学习中,公共属性的注入配置是一个重要的概念,它可以帮助我们实现代码的复用,提高开发效率。本文将详细解析Spring中的公共属性注入配置,并通过实例来深入理解其工作原理。 首先,我们需要理解什么...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

Global site tag (gtag.js) - Google Analytics