Spring Aware基本使用

44 阅读1分钟

什么是Spring Aware?

Spring 的依赖注入使得 Bean 类对 Spring 容器的存在是没有意识的,因此容器是可以变更的,例如使用 Google Guice 作为 IoC 容器。

在实际中,有时候会需要用到 Spring 容器本身的功能资源(获取容器,然后调用其提供的方法),这时 Bean 类就必须能意识到 Spring 容器的存在,才能调用 Spring 所提供的资源,这就是所谓的 Spring Aware。

如果使用了 Sprig Aware,那么 Bean 类就将与 Spring 框架耦合。

使用Spring Aware

Spring Aware 的目的是为了让 Bean 类获得 Spring 容器的服务,因为ApplicationContext接口继承了MessageSourceApplicationEventPublisherResourceLoader接口(等),所以 Bean 类实现ApplicationContextAware接口(@Override public void setApplicationContext(ApplicationContext applicationContext))就可以获得 Spring 容器所有的服务,但原则上用到什么再实现什么接口。

示例一

  • 定义一个AwareService服务类。
  • 实现BeanNameAware接口,并重写setBeanName方法用于获取当前 Bean 的名称,并将其存储在beanName变量中。
  • 实现BeanFactoryAware接口,并重写setBeanFactory方法。在这个方法中可以使用BeanFactory获取指定的beanName名称的 Bean 实例,然后打印输出。
@Service
public class AwareService implements BeanNameAware,BeanFactoryAware,ResourceLoaderAware{

    String beanName;

    @Override
    public void setBeanName(String s) {
        beanName = s;
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println(beanFactory.getBean(beanName));
    }

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {

    }
}

示例二

  • 定义一个AwareService服务类。
  • 实现ApplicationContextAware接口,在setApplicationContext方法中,通过传入的 ApplicationContext对象,获取名为awareService的 Bean 实例,然后打印输出。
@Service
public class AwareService implements ApplicationContextAware{

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println(applicationContext.getBean("awareService"));
    }
}