Spring中的Bean
一:Bean的配置
可以吧Spring看作是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品。
要想使用这个工厂生产和管理Bean,就要在配置文件中告诉他需要哪些Bean,以及需要使用何种方式
将这些Bean装配到一起。
Spring容器支持两种格式的配置文件,分别是Properties文件格式和XML文件格式。
而最常用的是XML文件格式的配置方式,所以我这只讲XML配置文件格式。
XML文件的根元素是<beans>,<beans>中包含多个<bean>子元素,每一个<bean>子元素就定义了
一个Bean,并描述该Bean如何被装配到Spring容器中。
<bean>的属性:
- id:Bean的唯一标识符,Spring容器通过该属性对Bean进 行配置和管理
- name:同样有id的作用,但是可以为Bean指定多个名称,以逗号或分号隔开,用于给Bean起个别名
- class:指定了Bean的具体实现类,必须是一个完整的了类,使用类的全限定义
- scope:用来设定Bean的作用域(后面会讲)
- constructor-arg:bean元素的子元素,使用次元素传入构造参数进行实例化
- property:bean元素的子元素,用于调用Bean实例中的Setter方法完成属性赋值,从而完成依赖注入。
- ref:property,constructor-arg等元素的子元素,该元素中的bean属性用于指定对Bean工厂中某个Bean实例的引用
- value:property,constructor-arg等元素的子元素,用来直接指定一个常量值
- list:用于封装List或数组类型的依赖注入
- set:用于封装Set类型属性的依赖注入
- map:用于封装Map类型属性的依赖注入
- entry:map元素的子元素,用于设置一个键值对
在配置文件中,通常一个普通的Bean只需要定义id(或name)和class两个属性即可:
<?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 id="userDao" class="cn.itcast.ioc.UserDaoImpl"></bean>
<bean id="userService" class="cn.itcast.ioc.UserServiceImpl"></bean>
</beans>
二:Bean的实例化
在面向对象的程序中,要想使用某个对象,就需要先实例化这个对象。在Spring中,实例化Bean有三种方式,分别为构造器实例化,静态工厂实例化和实例化工厂实例化。
2.1,构造器实例化
新建一个web项目,名称自拟,导入基础jar包 (不会的先看博客Spring入门案例)
在src目录下新建一个名称为 cn.itcast.instance.constructor的包
在该包下新建Bean1类:Bean1.java:
package cn.itcast.instance.constructor;
public class Bean1 {
}
在该包下新建Spring的配置文件beans1.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 id="bean1" class="cn.itcast.instance.constructor.Bean1"></bean>
</beans>
在该包下新建类InstanceTest1:
package cn.itcast.instance.constructor;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest1 {
@Test
public void demo01(){
String xmlPath = "cn/itcast/instance/constructor/bean1.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean1"));
}
}
Junit4测试运行demo01()方法后
可以看到Spring容器已经成功实例化Bean,并输出了结果
2.2,静态工厂方式实例化
在上一个项目src目录下新建名为cn.itcast.instance.static_factory的包
在该包下创建一个类Bean2,和Bean1一样
在该包下新建一个类MyBean2Factory:
package cn.itcast.instance.static_factory;
public class MyBean2Factory {
//使用自己的工厂创建bean实例
public static Bean2 createBean(){
return new Bean2();
}
}
在该包下创建Spring配置问价bean2.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 id="bean2" class="cn.itcast.instance.static_factory.MyBean2Fatory"
factory-method="createBean">
</bean>
</beans>
在改包下创建一个类InstanceTest2:
package cn.itcast.instance.static_factory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest2 {
@Test
public void demo02(){
String xmlPath = "cn/itcast/instance/static_factory/bean2.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean2"));
}
}
测试运行后:
以成功实例化Bean
2.3,实例工场方式实例化
在上个项目的src目录下新建个名为 cn.itcast.instance.factory的包
在包下新建一个类Bean3 同Bean2
在该包下新建一个类MyBean3Factory:
package cn.itcast.instance.factory;
import org.junit.Test;
public class MyBean3Factory {
public MyBean3Factory(){
System.out.println("bean3 工厂实例化中");
}
public Bean3 createBean(){
return new Bean3();
}
}
在该包下创建Spring的配置文件bean3.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 id="myBean3Factory"
class="cn.itcast.instance.factory.MyBean3Factory">
</bean>
<bean id="bean3" factory-bean="myBean3Factory"
factory-method="createBean">
</bean>
</beans>
在该包下创建类InstanceTest3
package cn.itcast.instance.factory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest3 {
@Test
public void demo03(){
String xmlPath = "cn/itcast/instance/factory/bean3.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}
测试运行
以成功实例化Bean
带更新.......
三:Bean的作用域
3.1,作用域的种类
3.2,Singleton 作用域
3.3,Prototype 作用域
四:Bean的生命周期
五:Bean的装配方式
5.1,基于 XML 的装配
5.2,基于Annotation的装配
5.3,自动装配
上一篇: Spring中的Bean
下一篇: Spring(3)--装载Bean的概述