springboot~ApplicationContextAware与@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中抛出对应的异常,来提示给开发人员
合集:
springboot(2)
分类:
Java
, springboot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-09-09 Lind.DDD.Manager里的3,7,15,31,63,127,255,511,1023,2047
2014-09-09 数据结构~时间复杂度
2013-09-09 我心中的核心组件(可插拔的AOP)~调度组件quartz.net
2011-09-09 WebRequest之HttpWebRequest实现服务器上文件的下载(一)
2011-09-09 中大型系统架构组合之EF4.1+ASP.NET MVC+JQuery