Spring内部bean实例

Posted Wit_tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring内部bean实例相关的知识,希望对你有一定的参考价值。

Spring框架中,一个 bean仅用于一个特定的属性,这是提醒其声明为一个内部bean。内部 bean支持setter注入property”构造器注入"constructor-arg“。 下面来看看一个详细的例子,演示使用 Spring 内部 bean 。
package com.yiibai.common;

public class Customer 

	private Person person;

	public Customer(Person person) 
		this.person = person;
	

	public void setPerson(Person person) 
		this.person = person;
	

	@Override
	public String toString() 
		return "Customer [person=" + person + "]";
	
package com.yiibai.common;

public class Person 

	private String name;
	private String address;
	private int age;
	
	//getter and setter methods
	
	@Override
	public String toString() 
		return "Person [address=" + address + ", 
                               age=" + age + ", name=" + name + "]";
		
很多时候,可以使用  'ref' 属性 来引用“ Person” bean到“Customer” Bean,person的属性 如下:
<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-2.5.xsd">

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="person" ref="PersonBean" />
	</bean>

	<bean id="PersonBean" class="com.yiibai.common.Person">
		<property name="name" value="yiibai" />
		<property name="address" value="address1" />
		<property name="age" value="28" />
	</bean>
	
</beans>
在一般情况下,引用这样也没有问题,但由于“yiibai” persion bean 只用于Customer bean,这是更好地声明 “yiibai” person 作为一个内部 bean,如下:
<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-2.5.xsd">

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="person">
			<bean class="com.yiibai.common.Person">
				<property name="name" value="yiibai" />
				<property name="address" value="address1" />
				<property name="age" value="28" />
			</bean>
		</property>
	</bean>
</beans>
内部 bean 也支持构造器注入如下:
<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-2.5.xsd">

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<constructor-arg>
			<bean class="com.yiibai.common.Person">
				<property name="name" value="yiibai" />
				<property name="address" value="address1" />
				<property name="age" value="28" />
			</bean>
		</constructor-arg>
	</bean>
</beans>
注意:
id 或 name 值在bean类是没有必要以一个内部 bean 呈现,它会简单地忽略Spring容器。

执行结果:

package com.yiibai.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 

    public static void main( String[] args )
    
    	ApplicationContext context = 
    	  new ClassPathXmlApplicationContext(new String[] "Spring-Customer.xml");

    	Customer cust = (Customer)context.getBean("CustomerBean");
    	System.out.println(cust);
     
    

输出结果:

Customer [person=Person [address=address1, age=28, name=yiibai]]

以上是关于Spring内部bean实例的主要内容,如果未能解决你的问题,请参考以下文章

什么是 spring 的内部 bean?

spring 内部工作机制

在Spring上下文中的原型bean中的单例bean

Spring——管理Bean的生命周期

spring 中的bean和@Bean

spring的finishBeanFactoryInitialization方法分析