3.1 Spring高级话题: Spring Aware
3.1 Spring Aware
1.Spring最大的亮点就是就是Bean对Spring存在是没有意识的,即使换成Google Guice框架(Bean之间的耦合是很低的)
2.Spring Aware: 使用 Spring自己的资源来开发(Bean意识到Spring的存在),叫做Aware.
-> 不能替换为其他容器,因为此时已经和Spring耦合起来
Spring提供的Aware接口
1.BeanNameAware
1.1 获得容器中Bean的名称
2.BeanFactoryAware
2.1 获取当前BeanFactory -> 可以调用容器的服务
3.ApplicationContextAware*
3.1 获取当前的Application context -> 可以调用容器服务
4.MessageSourceAware
4.1 获得message source 可以获取文件信息
5.ApplicationEventPublisherAware
5.1 应用时间发布器,可以发布事件
6.ResourceLoaderAware
6.1 获得资源加载器,可以获取外部资源
package com.demo.bug.service;
import com.demo.bug.DI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.*;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class AwareService implements BeanNameAware, BeanFactoryAware, ApplicationContextAware, MessageSourceAware, ApplicationEventPublisherAware, ResourceLoaderAware {
private String beanName;
private BeanFactory beanFactory;
private ApplicationContext applicationContext;
private ApplicationEventPublisher applicationEventPublisher;
private MessageSource messageSource;
private ResourceLoader resourceLoader;
/**
* BeanNameAware
*
* @param s
*/
@Override
public void setBeanName(String s) {
this.beanName = s;
}
/**
* BeanFactoryAware
*
* @param beanFactory
* @throws BeansException
*/
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
/**
* ApplicationContextAware
*
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* ApplicationEventPublisherAware
*
* @param applicationEventPublisher
*/
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
/**
* MessageSourceAware
*
* @param messageSource
*/
@Override
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
/**
* ResourceLoaderAware
*
* @param resourceLoader
*/
@Override
public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
}
public void test() {
/**
* 当前调用的Bean的名字
*/
String beanName = this.beanName;
System.out.println("beanName:" + beanName);
/**
* 当前bean工厂
*/
DI bean = this.beanFactory.getBean(DI.class);
System.out.println("bean:" + bean);
/**
* 当前上下文
*/
long startupDate = this.applicationContext.getStartupDate();
System.out.println("项目启动时间:" + new Date(startupDate));
/**
* event事件
*/
this.applicationEventPublisher.publishEvent("event");
/**
* message
*/
// this.messageSource.getMessage()
/**
* 获取资源加载 resourceLoader
*/
Resource resource = this.resourceLoader.getResource("classpath:" + this.getClass().getName().replace(".", "/")+".java");
}
}