spring提供的FactoryBean注册组件示例

1、创建一个maven项目(创建maven项目过程省略),pom.xml文件引入如下依赖:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>

2、创建一个Employee的实体类,代码如下:

package com.rf.bean;

public class Employee {

}

3、创建一个Spring定义的FactoryBean,实现FactoryBean接口,代码如下:

package com.rf.bean;

import org.springframework.beans.factory.FactoryBean;

//创建一个Spring定义的FactoryBean
public class EmployeeFactoryBean implements FactoryBean<Employee>{
	
	//返回一个Employee对象,这个对象会添加到容器中
	public Employee getObject() throws Exception {
		System.out.println("EmployeeFactoryBean的getObject()方法。。。。。");
		return new Employee();
	}

	public Class<?> getObjectType() {
		// TODO Auto-generated method stub
		return Employee.class;
	}
	/**
	 * 是单例?
	 * true:这个bean是单实例,在容器中保存一份
	 * false:多实例,每次获取都会创建一个新的bean;
	 */
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return true;
	}

}

4、编写配置类,代码如下:

package com.rf.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.rf.bean.EmployeeFactoryBean;


@Configuration
public class MyConfig {
	/**
	 * 使用Spring提供的 FactoryBean(工厂Bean);
	 */
	@Bean
	public EmployeeFactoryBean employeeFactoryBean(){
		return new EmployeeFactoryBean();
	}
}

5、编写测试类,代码如下:

package com.rf.test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.rf.config.MyConfig;
public class Test {
	@org.junit.Test	
	public void test04(){
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
		System.out.println("ioc容器创建完成了。。。。");
		
		//获取注册的组件名称
		String[] beanNamesForType = applicationContext.getBeanDefinitionNames();
		for(String name: beanNamesForType){
			System.out.println("获取注册的组件名称-------"+name);
		}
		//默认获取到的是工厂bean调用getObject创建的对象
		Object bean = applicationContext.getBean("employeeFactoryBean");
		System.out.println("获取工厂bean调用getObject创建的对象的类型:"+bean.getClass());
		//要获取工厂Bean本身,我们需要给id前面加一个&
		Object bean1 = applicationContext.getBean("&employeeFactoryBean");
		System.out.println("获取工厂Bean本身的类型:"+bean1.getClass());
		
	}
}

6、启动测试类,运行效果如下:
spring提供的FactoryBean注册组件示例_第1张图片

你可能感兴趣的:(spring)