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