springboot~ApplicationContextAware与@Autowired注解

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568


  • ApplicationContextAware是一个接口,它提供一个方法setApplicationContext,当spring注册完成之后,会把ApplicationContext对象以参数的方式传递到方法里,在方法里我们可以实现自己的逻辑,去获取自己的bean,当前对接的断言等;一般用在被封装的工具包,starter包中,方便给其它开发人员调用。
  • @Autowired是直接给开发人员用的,直接注入对接类型的bean的,开箱即用,对应的注解还有@Qualifier,或者直接使用@Resource注解来实现按beanName的注入。
例子

LindContext
  1. @Component
  2. public class LindContext {
  3.     public void print(){
  4.         System.err.println("lind-context print.");
  5.     }
  6. }
复制代码
LindAware
  1. public class LindAware implements ApplicationContextAware {
  2.     ApplicationContext applicationContext;
  3.     LindContext lindContext;
  4.     public void contextPrint() {
  5.         this.lindContext.print();
  6.     }
  7.     @Override
  8.     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  9.         this.applicationContext = applicationContext;
  10.         if (this.applicationContext.getBeansOfType(LindContext.class).isEmpty()) {
  11.             throw new IllegalArgumentException("未加载或者未发现LindContext的bean,请保证它可以正常加载到Spring容器.");
  12.         }
  13.         this.lindContext = this.applicationContext.getBean(LindContext.class);
  14.     }
  15. }
复制代码
LindConfig
  1. @Configuration
  2. public class LindConfig {
  3.     @Bean
  4.     public LindAware testAware() {
  5.         return new LindAware();
  6.     }
  7. }
复制代码
测试
  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest()
  3. public class TestAware {
  4.     @Autowired
  5.     LindAware lindAware;
  6.     @Test
  7.     public void print() {
  8.         lindAware.contextPrint();
  9.     }
  10. }
复制代码
当前如果没有LindContext的bean被注册时,会在LindAware中抛出对应的异常,来提示给开发人员


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表