jjzjj

springboot~ApplicationContextAware与@Autowired注解

敢于对过去告一个段落,才有信心掀开新的篇章! 2023-04-17 原文
  • 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~ApplicationContextAware与@Autowired注解的更多相关文章

  1. springboot定时任务 - 2

    如果您希望在Spring中启用定时任务功能,则需要在主类上添加 @EnableScheduling 注解。这样Spring才会扫描 @Scheduled 注解并执行定时任务。在大多数情况下,只需要在主类上添加 @EnableScheduling 注解即可,不需要在Service层或其他类中再次添加。以下是一个示例,演示如何在SpringBoot中启用定时任务功能:@SpringBootApplication@EnableSchedulingpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.ru

  2. 基于SpringBoot的线上日志阅读器 - 2

    软件特点部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。使用手册基本页面配置路径配置日志所在的目录,配置后按回车键生效,下拉框选择日志名称。选择日志后点击生效,即可加载日志。windows路径E:\java\project\log-view\logslinux路径/usr/local/XX历史模式历史模式下,不会读取新增的日志。针对历史文件可以分页读取,配置分页大小、跳转。历史模式下,支持根据关键词搜索。目前搜索引擎使用的是jdk自带类库,搜索速度相对较低,优点是比较简单。2G日志全文搜

  3. springboot使用validator进行参数校验 - 2

    1.依赖导入org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-validation2.validation常用注解@Null被注释的元素必须为null@NotNull被注释的元素不能为null,可以为空字符串@AssertTrue被注释的元素必须为true@AssertFalse被注释的元素必须为false@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@D

  4. 停车系统源码-基于springboot+uniapp开源项目 - 2

    Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统

  5. 优化大数据量查询方案——SpringBoot(Cloud)整合ES - 2

    一、Elasticsearch简介实际业务场景中,多端的查询功能都有很大的优化空间。常见的处理方式有:建索引、建物化视图简化查询逻辑、DB层之上建立缓存、分页…然而随着业务数据量的不断增多,总有那么一张表或一个业务,是无法通过常规的处理方式来缩短查询时间的。在查询功能优化上,作为开发人员应该站在公司的角度,本着优化客户体验的目的去寻找解决方案。本人有幸做过Tomcat整合solr,今天一起研究一下当前比较火热的Elasticsearch搜索引擎。Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建。它的代码位

  6. ruby - 如何在 Ruby 中模拟类 Java 的注解? - 2

    如何在ruby中模拟类Java注解?(好吧,我有答案了,概括一下http://bens.me.uk/2009/java-style-annotations-in-ruby) 最佳答案 本文改编自apieceofcodeIwroteinananswertoanotherquestion几个星期前,虽然它当然不是原创的。这是一个著名的Ruby习语,毕竟它已经使用了很多年,至少从rakes的desc方法开始.moduleAnnotationsdefannotations(meth=nil)return@__annotations__[me

  7. SpringBoot+Netty实现TCP客户端实现接收数据按照16进制解析并存储到Mysql以及Netty断线重连检测与自动重连 - 2

    场景在SpringBoot项目中需要对接三方系统,对接协议是TCP,需实现一个TCP客户端接收服务端发送的数据并按照16进制进行解析数据,然后对数据进行过滤,将指定类型的数据通过mybatis存储进mysql数据库中。并且当tcp服务端断连时,tcp客户端能定时检测并发起重连。全流程效果 注:博客:霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主实现1、SpringBoot+Netty实现TCP客户端本篇参考如下博客,在如下博客基础上进行修改Springboot+Netty搭建基于TCP协议的客户端(二):https://www.cnblogs.com/haolb

  8. Java面试--SpringBoot启动流程 - 2

    一、SpringBoot是什么SpringBoot是依赖于Spring的,比起Spring,除了拥有Spring的全部功能以外,SpringBoot无需繁琐的Xml配置,这取决于它自身强大的自动装配功能;并且自身已嵌入Tomcat、Jetty等web容器,集成了SpringMvc,使得SpringBoot可以直接运行,不需要额外的容器,提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等,其实Spring大家都知道,Boot是启动的意思。所以,SpringBoot其实就是一个启动Spring项目的一个工具而已,总而言之,SpringBoot是一个服务于框架的

  9. springboot Socket 通信 - 2

    一、引入依赖:dependency>groupId>org.springframework.bootgroupId>artifactId>spring-boot-starter-websocketartifactId>2.7.1-->dependency>二、准备工具类:/***@authorWeiDaPang*/@ConfigurationpublicclassScheduledConfiguration{@BeanpublicTaskSchedulertaskScheduler(){ThreadPoolTaskSchedulertaskScheduler=newThreadPoolTask

  10. 使用postman访问springboot项目,出现Unsupported Media Type 415错误以及 Field ‘userId‘ doesn‘t have a default value - 2

    使用postman访问springboot项目,出现UnsupportedMediaType415错误以及java.sql.SQLException:Field‘userId’doesn’thaveadefaultvalueidea控制台显示Resolved[org.springframework.web.HttpMediaTypeNotSupportedException:Contenttype‘multipart/form-data;boundary=--------------------------508983844580882655519308;charset=UTF-8’notsu

随机推荐