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 [email protected]
*
*/
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 [email protected]
*
*/
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 [email protected]
*
*/
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 [email protected]
*
*/
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 [email protected]
*
*/
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>
推荐阅读
-
02Spring基于xml的IOC配置--实例化Bean的三种方式
-
Spring中bean的初始化和销毁几种实现方式详解
-
Spring实例化Bean的五种方式
-
spring配置文件(spring的开发步骤;bean中的scope,init-method,destroy-method;bean的工厂静态方法实例化;工厂动态方法实例化)
-
Spring | IOC之Bean的三种实例化
-
spring三种实例化bean的方式
-
Spring学习--Bean实例化的三种方式
-
Spring实例化Bean的五种方式
-
Spring框架_实例化Bean的三种方式
-
Spring中Bean的基于xml的三种实例化方式