Spring中Bean的基于xml的三种实例化方式

Spring中Bean的基于xml的三种实例化方式

1、JavaBean 是一种JAVA语言写成的可重用组件。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。

 2、Bean的种类

a)普通bean:由Spring直接创建实例。<bean id="" class="A">

b)FactoryBean:是一个特殊的bean,具有工厂生成对象能力,只能生成特定的对象。bean必须使用 FactoryBean接口,此接口提供方法 getObject() 用于获得特定bean。<bean id=""class="FB">

c)BeanFactory:是一个工厂,用于生成任意Bean。

3、普通Bean基于xml的三种实例化方法

      a) 默认构造 <beanid="" class="">

      b) 静态工厂:常用于与Spring整合其他框架,用于生成实例对象,所有的方法必须是static。

  <bean id="" class="工厂全限定类名"  factory-method="静态方法">

      c) 实例工厂,必须先有工厂实例对象,通过实例对象创建对象,所有的方法都是非静态的。

 

下面编写静态工厂方法和实例工厂方法的实例、配置和测试类。

1、静态工厂方法

      编写UserService接口、编写UserServiceImpl实现类,编写MyBeanFactory静态创建实例类,配置bean.xml,编写TestStaticFactory测试类。【不要忘了导包!

/**
 * 
 */
package com.Lily.SpringLeanring.a_staticFactory;

/** 
 * * 
 * @author   LilyLee
 * @date     2017年6月14日
 * @time     上午9:10:25
 * @Version  1.0
 * @email    lilylee_1213@foxmail.com
 *
 */
public interface UserService {
	public void addUser();
}


/**
 * 
 */
package com.Lily.SpringLeanring.a_staticFactory;

/** 
 * * 
 * @author   LilyLee
 * @date     2017年6月14日
 * @time     上午9:11:13
 * @Version  1.0
 * @email    lilylee_1213@foxmail.com
 *
 */
public class UserServiceImpl implements UserService {

	/* (non-Javadoc)
	 * @see com.Lily.SpringLearning.a_staticFacory.UserService#addUser()
	 */
	@Override
	public void addUser() {
		// TODO Auto-generated method stub
	System.out.println("Bean 静态工厂方法  addUser()");

	}

}

/**
 * 
 */
package com.Lily.SpringLeanring.a_staticFactory;

/** 
 * * 
 * @author   LilyLee
 * @date     2017年6月14日
 * @time     上午9:12:09
 * @Version  1.0
 * @email    lilylee_1213@foxmail.com
 *
 */
public class MyBeanFactory {
	public static UserService createService(){
		return new UserServiceImpl();
	}
}

<?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="userServiceId" class="com.Lily.SpringLeanring.a_staticFactory.MyBeanFactory" factory-method="createService"></bean>

</beans>

/**
 * 
 */
package com.Lily.SpringLeanring.a_staticFactory;

import static org.junit.Assert.*;

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

/** 
 * * 
 * @author   LilyLee
 * @date     2017年6月14日
 * @time     上午9:22:16
 * @Version  1.0
 * @email    lilylee_1213@foxmail.com
 *
 */
public class TestStaticFactory2 {

	@Test
	public void test() {
		String xmlPath="com/Lily/SpringLeanring/a_staticFactory/beans.xml";
		ApplicationContext ac=new ClassPathXmlApplicationContext(xmlPath);
		UserService u=ac.getBean("userServiceId", UserService.class);
		u.addUser();
	}

}



2、实例工厂方法

编写UserService接口、编写UserServiceImpl实现类,编写MyBeanFactory静态创建实例类,配置bean.xml,编写TestStaticFactory测试类。

与上面不同之处在于:

(1)MyBeanFactory的创建方法是非静态的。

(2)xml首先要创建工厂实例对象,然后才能通过实例对象去创建对象。

/**
 * 
 */
package com.Lily.SpringLeanring.a_staticFactory;

/** 
 * * 
 * @author   LilyLee
 * @date     2017年6月14日
 * @time     上午9:12:09
 * @Version  1.0
 * @email    lilylee_1213@foxmail.com
 *
 */
public class MyBeanFactory {
	public  UserService createService(){
		return new UserServiceImpl();
	}
}

<?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="myBeanFactoryId" class="com.Lily.SpringLearning.b_Factory.MyBeanFactory"></bean>
	<bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createService"></bean>
	
	
</beans>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值