欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

springboot~ApplicationContextAware与@Autowired注解,@Autowired

来源: javaer 分享于  点击 15897 次 点评:199

springboot~ApplicationContextAware与@Autowired注解,@Autowired


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

例子

LindContext

@Component
public class LindContext {
    public void print(){
        System.err.println("lind-context print.");
    }
}

LindAware

public class LindAware implements ApplicationContextAware {
    ApplicationContext applicationContext;
    LindContext lindContext;

    public void contextPrint() {
        this.lindContext.print();
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        if (this.applicationContext.getBeansOfType(LindContext.class).isEmpty()) {
            throw new IllegalArgumentException("未加载或者未发现LindContext的bean,请保证它可以正常加载到Spring容器.");
        }
        this.lindContext = this.applicationContext.getBean(LindContext.class);
    }
}

LindConfig

@Configuration
public class LindConfig {
    @Bean
    public LindAware testAware() {
        return new LindAware();
    }
}

测试

@RunWith(SpringRunner.class)
@SpringBootTest()
public class TestAware {
    @Autowired
    LindAware lindAware;

    @Test
    public void print() {
        lindAware.contextPrint();
    }
}

当前如果没有LindContext的bean被注册时,会在LindAware中抛出对应的异常,来提示给开发人员

作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980

支付宝扫一扫,为大叔打赏!

相关栏目:

用户点评