文档章节

导入bean的几种方式

x
 xxm1995
发布于 2018/12/01 19:41
字数 572
阅读 2
收藏 0

导入bean的几种方式

配置类

/**
* 给容器中注册组件;
* 1)、包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)[自己写的类]
* 2)、@Bean[导入的第三方包里面的组件]
* 3)、@Import[快速给容器中导入一个组件]
* 		1)、@Import(要导入到容器中的组件);容器中就会自动注册这个组件,id默认是全类名
* 		2)、ImportSelector:实现接口,返回需要导入的组件的全类名数组;
* 		3)、ImportBeanDefinitionRegistrar:实现接口,手动注册bean到容器中
* 4)、使用Spring提供的 FactoryBean(工厂Bean);
*/
@Import({Color.class,Red.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class MainConfig2 {
	/**
	* 使用Spring提供的 FactoryBean(工厂Bean);
	* 	1)、默认获取到的是工厂bean调用getObject创建的对象
	* 	2)、要获取工厂Bean本身,我们需要给id前面加一个&
	* 		&colorFactoryBean
	*/
	@Bean
	public ColorFactoryBean colorFactoryBean(){
		return new ColorFactoryBean();
	}
}

ImportSelector接口方式

//自定义逻辑返回需要导入的组件
public class MyImportSelector implements ImportSelector {
	//返回值,就是到导入到容器中的组件全类名
	//AnnotationMetadata:当前标注@Import注解的类的所有注解信息
	@Override
	public String[] selectImports(AnnotationMetadata importingClassMetadata) {
		//importingClassMetadata
		//方法不要返回null值
		return new String[]{"cn.bootx.Red","cn.bootx.Yellow"};
	}

}

ImportBeanDefinitionRegistrar接口方式

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
	/**
	 * AnnotationMetadata:当前类的注解信息
	 * BeanDefinitionRegistry:BeanDefinition注册类;
	 * 		把所有需要添加到容器中的bean;调用
	 * 		BeanDefinitionRegistry.registerBeanDefinition手工注册进来
	 */
	@Override
	public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
		//判断容器中是否有指定ID的bean
		boolean definition = registry.containsBeanDefinition("com.atguigu.bean.Red");
		boolean definition2 = registry.containsBeanDefinition("com.atguigu.bean.Blue");
		if(definition && definition2){
			//指定Bean定义信息;(Bean的类型,Bean。。。)
			RootBeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class);
			//注册一个Bean,指定bean名
			registry.registerBeanDefinition("rainBow", beanDefinition);
		}
	}

}

工厂Bean方式

//创建一个Spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<Color> {

	//返回一个Color对象,这个对象会添加到容器中
	@Override
	public Color getObject() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("ColorFactoryBean...getObject...");
		return new Color();
	}
	//返回对象的class类型
	@Override
	public Class<?> getObjectType() {
		return Color.class;
	}

	//是否单例
	//true:这个bean是单实例,在容器中保存一份
	//false:多实例,每次获取都会创建一个新的bean;
	@Override
	public boolean isSingleton() {
		return false;
	}
}

© 著作权归作者所有

x
粉丝 0
博文 24
码字总数 12971
作品 0
菏泽
私信 提问
【Spring 系列 给IOC容器添加组件的几种方式总结】

给Spring 注册Bean的几种方式总结。其中使用注解是Spring Boot 完成自动配置的一个核心注解。 1、Spring 中给IOC容器添加组件的几种方式 在Spring的配置文件中,配置Bean(基于XML方式) 使用注...

HansonReal
2018/07/17
0
0
spring梳理(二) 基于注解的方式注册bean

我们知道,如果想要将bean交由spring容器管理,就需要首先将bean注册在spring容器中,而bean可以通过xml或者注解的方式进行注册,基于xml的配置一般是通过、等xml标签进行配置,然后由sprin...

wyn_lin
2018/05/25
0
0
浅析 Spring IoC - XML Bean的配置

下面是Spring IoC的 xml 配置文件: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i......

pradosoul
2015/10/20
39
0
【注解驱动开发1】- 注册Bean的4种方式

1-1.传统xml方式 Xml配置文件的方式定义bean 1-2.注解方式 注解的方式定义bean 获取容器 2-1. 传统xml方式扫描bean 2-2. 注解方式扫描bean # @Conditional条件注解 条件 使用 3. 通过@Import...

FutaoSmile丶
04/12
0
0
Spring核心系列之Bean的注入

Spring核心系列之Bean的注入 Hello,大家好,上两篇博文给大家分享了Spring容器的创建,以及Bean的生命周期,今天这一篇给大家讲解Bean的注入,就是Bean的一些注入方式,配置方式,然后再讲一...

2018/01/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 带这么多钱,你要泡我吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :白给?#今日歌曲推荐# 分享Lana Del Rey的单曲《Yayo》: 《Yayo》- Lana Del Rey 手机党少年们想听歌,请使劲儿戳(这里) @红薯...

小小编辑
6分钟前
5
1
搭建tftp服务

前言: 最近整理一些以前的学习笔记。 过去都是存储在本地,此次传到网络留待备用。 TFTP服务: TFTP:Trivial File Transfer Protocol 不重要文件传输协议 主要用来传送小文件,不支持认证和...

迷失De挣扎
今天
4
0
rest 的理解

rest:表现层状态转移。 什么是restful协议?https://en.wikipedia.org/wiki/Representational_state_transfer 使用restful的好处。 Rest是一种体系结构样式,他定义了一组用于创建web服务的...

xiaoxiao_go
今天
5
0
聊聊spring cloud的CachingSpringLoadBalancerFactory

序 本文主要研究一下spring cloud的CachingSpringLoadBalancerFactory CachingSpringLoadBalancerFactory spring-cloud-openfeign-core-2.2.0.M1-sources.jar!/org/springframework/cloud/o......

go4it
昨天
6
0
一篇文章搞定——JDK8中新增的StampedLock

一、StampedLock类简介 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部