spring bean 配置

在spring的xml配置文件中咱们能够经过<bean>标签 进行java bean的注入java

基础注入

基础bean类web

package com.zhu.example.beantest;

/**
 * <p>Title: HelloWorldBean</p>
 * <p>Description: </p>
 * @author zhukai
 */
public class HelloWorldBean {
	private String messageString="Hello World";
	
	HelloWorldBean(){
		
	}
	
	HelloWorldBean(String message){
		this.messageString=message;
	}

	public String getMessageString() {
		return messageString;
	}

	public void setMessageString(String messageString) {
		this.messageString = messageString;
	}
	
	
}

xml文件bean配置spring

<!-- 最基础的bean配置 -->
     <bean id="HelloWorldBean" class="com.zhu.example.beantest.HelloWorldBean" ></bean>

这种bean注入采用的是注入类的无参数构造函数进行类的实例化,而且是单例模式的session

多实例注入

<!-- 多实例模式 每次getbean有一个新的实例生成-->
     <bean id="mutiHelloWorldBean" class="com.zhu.example.beantest.HelloWorldBean" scope="prototype"></bean>

针对web应用程序,还能够配置为request、session等范围。app

带参数的构造函数的bean注入

注入类函数

package com.zhu.example.beantest;

import java.util.Date;

/**
 * <p>Title: ParamConstructorBean</p>
 * <p>Description:这个类没有空方法 </p>
 * @author zhukai
 */
public class ParamConstructorBean {
	
	private String name;
	
	private Date  date;
	
	ParamConstructorBean(String name){
		this.name=name;
	}
	
	ParamConstructorBean(Date date){
		this.date=date;
	}

	public String getName() {
		return name;
	}

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

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	
}

这个类有两个构造函数。测试

xml文件配置this

<!-- 带参数的构造函数 -->
	<bean id="ParamConstructorBean" class="com.zhu.example.beantest.ParamConstructorBean">
		<constructor-arg>
			<value>hello</value>
		</constructor-arg>
	</bean>

这个注入使用的构造函数是 String 类型为参数的spa

<!-- 带参数的构造函数(参数为一个bean) -->
	<bean id="bean_date" class="java.util.Date" /> 


	<bean id="ParamConstructorBean" class="com.zhu.example.beantest.ParamConstructorBean">
		<constructor-arg index="0" ref="bean_date">
		</constructor-arg>
	</bean>

这个注入 使用构造函数参数为date的prototype

工厂模式注入

使用静态工厂和实例工厂,两种工厂来注入HelloWorldBean类

静态工厂

package com.zhu.example.beantest;

/**
 * <p>Title: StaticBeanFactory</p>
 * <p>Description: </p>
 * @author zhukai
 */
public class StaticBeanFactory {
	
	public static HelloWorldBean getHelloBean() {
		
		return new HelloWorldBean("sta hello world");
	}

}

实例工厂

package com.zhu.example.beantest;

/**
 * <p>Title: InstanceBeanFactory</p>
 * <p>Description: </p>
 * @author zhukai
 */
public class InstanceBeanFactory {
	
	public HelloWorldBean getHelloBean() {
		return new HelloWorldBean("ins hello world");
	}
}

xml文件配置

<!-- 工厂模式配置bean -->
	<!-- 静态工厂 -->
	<bean id="HelloWorldBeanfac" class="com.zhu.example.beantest.StaticBeanFactory" factory-method="getHelloBean"/> 
	
	<!-- 实例工厂 -->
	<bean id="bean_factory" class="com.zhu.example.beantest.InstanceBeanFactory"/> 

	<bean id="HelloWorldBeanfacIns" factory-bean="bean_factory" factory-method="getHelloBean"/>

bean property 注入

<!-- 属性注入 -->
    <bean id="HelloWorldBeanPro" class="com.zhu.example.beantest.HelloWorldBean" >
    	    <property name="messageString" value="pro 测试 你好!" /> 
    </bean>

只要实现了相似这种get、set方法就等实现成员变量的注入

public String getMessageString() {
		return messageString;
	}

	public void setMessageString(String messageString) {
		this.messageString = messageString;
	}

注入完成后的bean取用

首先初始化context

@Before
	public void setUp() throws Exception {
		context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","applicationContext-beantest.xml"});

	}

测试类

@Test
	public void testRegBean() throws Exception {
		//基础bean
		HelloWorldBean basicHelloBean = (HelloWorldBean) context.getBean("HelloWorldBean");
		
		//基础带参数构造函数bean
		ParamConstructorBean basicParamBean = (ParamConstructorBean) context.getBean("ParamConstructorBean");
		
		//静态工厂模式bean
		HelloWorldBean facHelloBean = (HelloWorldBean) context.getBean("HelloWorldBeanfac");
		
		//实例工厂模式bean
		HelloWorldBean facInsHelloBean = (HelloWorldBean) context.getBean("HelloWorldBeanfacIns");
		
		
		
		System.out.println(basicHelloBean.getMessageString());
		System.out.println(basicParamBean.getDate());
		System.out.println(facHelloBean.getMessageString());
		System.out.println(facInsHelloBean.getMessageString());
		
		
	}

输出以下

Hello World
Thu Aug 11 11:11:04 CST 2016
sta hello world
ins hello world
相关文章
相关标签/搜索