自定义组件使用spring底层组件

自定义组件想要使用Spring容器底层的一些组件(ApplicationContextBeanFactory等),需要实现xxxAware在创建对象的时候,会调用接口规定的方法注入相关组件;

把Spring底层一些组件注入到自定义的Bean中;

例如:

  1. 拿到spring的IOC容器,实现ApplicationContextAware接口;

  2. 获得spring ioc容器给当前Bean设置的名称,实现BeanNameAware接口;

  3. 获得特殊符号的解析器,实现EmbeddedValueResolverAware接口;

xxxAware接口都是继承Aware接口,实现Aware接口的类都有一个后置处理器BeanPostProcessor处理对应的功能;

例如:ApplicationContextAware(实现Aware接口) --> ApplicationContextAwareProcessor(实现BeanPostProcessor接口)

1、拿到spring的IOC容器

public class MyBean implements ApplicationContextAware {
    @Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        //拿到spring的IOC容器
		System.out.println("传入的IOC容器:"+ applicationContext);
	}
}

2、获得spring ioc容器给当前Bean设置的名称

public class MyBean implements BeanNameAware{
    @Override
	public void setBeanName(String name) {
        //获得spring给当前Bean设置的名称
		System.out.println("当前bean的名字:"+name);
	}
}

3、获得特殊符号的解析器

public class MyBean implements EmbeddedValueResolverAware {
    @Override
	public void setEmbeddedValueResolver(StringValueResolver resolver) {
		String resolveStringValue = resolver.resolveStringValue("你好 ${os.name},我是#{20*18}");
		System.out.println(resolveStringValue);
	}
}

测试:

//配置类
@Configuration
public class MainConifgOfAutowired {
	@Bean
	public MyBean myBean(){
		return new MyBean();
	}
}

//测试类
public class IOCTest {
    @Test
    public void test01(){
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConifgOfAutowired.class);
        System.out.println("创建容器完成!");
    }
}

//打印:省略spring底层组件
当前bean的名字:myBean
你好 Windows 10,我是360
传入的IOC容器:org.springframework.context.annotation.AnnotationConfigApplicationContext@77afea7d, started on Tue Dec 01 18:07:12 CST 2020
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值