欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring中的Bean

程序员文章站 2022-03-03 11:50:09
...

一: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

   可以看到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"));
	}
}
   测试运行后:

Spring中的Bean
   以成功实例化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"));
	}
}
测试运行

Spring中的Bean
以成功实例化Bean





带更新.......




三:Bean的作用域

3.1,作用域的种类

3.2,Singleton 作用域

3.3,Prototype 作用域


四:Bean的生命周期


五:Bean的装配方式

5.1,基于 XML 的装配

5.2,基于Annotation的装配

5.3,自动装配




相关标签: Spring中的Bean