在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
注入类函数
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 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