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,自动装配




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值