Aware主动注入

  • BeanNameAware
  • BeanFactoryAware
  • ApplicationContextAware
  • MessageSourceAware
  • ApplicationEventPublisherAware
  • ResourceLoaderAware

Aware接口形容
BeanNameAware能够在Bean中失去它在IOC容器中的Bean的实例的名字
BeanFactoryAware能够在Bean中失去Bean所在的IOC容器,从而间接在Bean中应用IOC容器的服务。
ApplicationContextAware能够在Bean中失去Bean所在的利用上下文,从而间接在Bean中应用上下文的服务。
MessageSourceAware在Bean中能够失去音讯源。
ApplicationEventPublisherAware在bean中能够失去利用上下文的事件公布器,从而能够在Bean中公布利用上下文的事件。
ResourceLoaderAware在Bean中能够失去ResourceLoader,从而在bean中应用ResourceLoader加载内部对应的Resource资源。 在设置Bean的属性之后,调用初始化回调办法之前,Spring会调用aware接口中的setter办法。

实例类Holder/Rumenz

package com.rumenz;import org.springframework.beans.factory.BeanNameAware;public class Holder implements BeanNameAware {    private Rumenz rumenz;    public Holder(Rumenz rumenz) {        this.rumenz = rumenz;    }    public Rumenz getRumenz() {        return rumenz;    }    public void setRumenz(Rumenz rumenz) {        this.rumenz = rumenz;    }    @Override    public void setBeanName(String name) {        System.out.println("BeanName: "+name);    }}// Rumenz.javapackage com.rumenz;public class Rumenz {    private Integer id;    private String name;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

配置文件Beans.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:util="http://www.springframework.org/schema/util"       xsi:schemaLocation="        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">    <bean id="rumenz" class="com.rumenz.Rumenz">        <property name="id" value="123"/>        <property name="name" value="入门小站"/>    </bean>

调用

package com.rumenz;public class DemoApplication implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, MessageSourceAware, ApplicationEventPublisher,ResourceLoaderAware {    @Autowired    private Holder holder;    private  static BeanFactory beanFactory;    private  static  ApplicationContext applicationContext;    public static void main(String[] args) {        AnnotationConfigApplicationContext ac=new AnnotationConfigApplicationContext();        XmlBeanDefinitionReader xr=new XmlBeanDefinitionReader(ac);        xr.loadBeanDefinitions("Beans.xml");        ac.register(DemoApplication.class);        ac.refresh();        DemoApplication bean = ac.getBean(DemoApplication.class);        System.out.println(bean.holder.getRumenz().getName());        System.out.println(applicationContext==ac);        System.out.println(ac.getBeanFactory()==beanFactory);        ac.close();    }    @Bean    public Holder holder(Rumenz rumenz){        return new Holder(rumenz);    }    @Override    public void setBeanName(String name) {        System.out.println("BeanName =:"+name);    }    @Override    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {        this.beanFactory=beanFactory;    }    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        this.applicationContext=applicationContext;    }    @Override    public void setMessageSource(MessageSource messageSource) {        System.out.println("messageSource"+messageSource);    }    @Override    public void publishEvent(ApplicationEvent event) {    }    @Override    public void publishEvent(Object event) {    }    @Override    public void setResourceLoader(ResourceLoader resourceLoader) {    }}

原文: https://rumenz.com/rumenbiji/Spring-Aware-Injection.html