前面几篇文章简单的介绍了spring中bean注解以及怎么在spring实现bean自动注入对应的bean,未查看的同学可以点击查看:
-
深入理解spring注解之@Bean注解
-
三分钟了解spring-bean生命周期之初始化和销毁的三种方式
-
三分钟学会@Autowired@Qualifier@Primary注解
-
一分钟学会spring注解之@Autowired注解(二)
了解spring容器的IOC(依赖注入)的同学应该知道,我们的所有的bean对于spring容器是无意识的,啥叫无意识呢,就是你完全可以把spring容器替换成其他的容器而不需要改变你的代码,并且bean之间也是没有耦合的,既然这样,那问题就来,假如现在我们需要对spring有意识,换句话说就是现在我们的业务可能需要用到spring底层的一些功能那么我们该怎么实现?这个其实优秀的spring框架早就帮我们想到了,那就是spring提供了一系列的xxxAware接口供我们自己来实现使用
首先我来看一张图如下:
从这个图中我们可以看到spring给我们提供了多达12种Aware接口,这边我们主要演示一下BeanNameAware,ResourceLoaderAware,ApplicationContextAware,BeanFactoryAware的使用,其他的xxxAware感兴趣的同学可以自己下去试试
首先我们新建一个MyAware如下:
/**
* 定义一个继承了BeanNameAware,
* ResourceLoaderAware,
* ApplicationContextAware,
* BeanFactoryAware
* 的bean
* @author zhangqh
* @date 2018年5月19日
*/
public class MyAware implements BeanNameAware,ResourceLoaderAware,ApplicationContextAware,BeanFactoryAware{
private String beanName;
private ResourceLoader loader;
private ApplicationContext applicationContext;
private BeanFactory beanFactory;
// BeanFactoryAware中的方法
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.beanFactory = beanFactory;
}
// ApplicationContextAware中的方法
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
// ResourceLoaderAware中的方法
public void setResourceLoader(ResourceLoader resourceLoader) {
this.loader = resourceLoader;
}
public void printResult() throws IOException {
System.out.println("BeanNameAware Bean的名称是:" + beanName);
Resource resource = loader.getResource("classpath:test.txt");
System.out.println("----------------------------------------" );
System.out.print("ResourceLoaderAware ResourceLoader加载的内容是:");
String line = null;
BufferedReader reader = new BufferedReader(new InputStreamReader(
resource.getInputStream()));
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
Environment environment = applicationContext.getEnvironment();
System.out.println("----------------------------------------" );
System.out.println("ApplicationContextAware 系统是:" + environment.getProperty("os.name"));
boolean flow = beanFactory.isSingleton(beanName);
System.out.println("----------------------------------------" );
System.out.println("BeanFactoryAware bean【" + beanName+" 】是单例嘛:"+flow);
}
// BeanNameAware中的方法
public void setBeanName(String name) {
this.beanName = name;
}
}
src\main\resources目录下边我们有一个test.txt文件内容是:
i'm test data
测试方法如下:
AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainScanConfig.class);
MyAware myAware = (MyAware) applicationContext2.getBean("myAware");
myAware.printResult();
运行结果如下:
BeanNameAware Bean的名称是:myAware
----------------------------------------
ResourceLoaderAware ResourceLoader加载的内容是:i'm test data
----------------------------------------
ApplicationContextAware 系统是:Windows 7
----------------------------------------
BeanFactoryAware bean【myAware 】是单例嘛:true
从以上测试结果可以发现我们需要注入spring相关的服务已经成功的加入到了我们自定义的MyAware中了
好了,看了这么的我们稍微简单的总结下xxxAware接口
-
都是Aware接口的子接口,即都继承了Aware接口
-
父接口Aware中没有定义任何方法
-
接口内均定义了一个set方法,set参数就是我们需要获取的对象
以上是今天文章的所有内容,欢迎大家吐槽
推荐阅读
全网最全技术视频和电子书免费发放
更多优质文章请关注以下公众号查阅:
相关推荐
在Spring框架中,Aware接口系列是其核心特性之一,它为Spring容器提供了向bean注入上下文信息的能力。这些接口让bean能够感知到Spring容器的存在,从而获取必要的服务或配置信息。下面我们将深入探讨Spring的Aware...
在低版本的Spring中实现类似自动配置的...同时,还需要结合生命周期回调和各种Aware接口,以实现Bean的定制和功能增强。通过这种方式,即使在没有高级特性支持的老版本Spring中,也能实现灵活的配置管理和功能扩展。
Spring源码流程图解析 Spring源码流程图是了解...通过了解核心组件、Bean定义信息、Bean工厂、Bean生命周期和Aware接口的作用,我们可以更好地理解Spring框架的工作原理,并更好地使用Spring框架来开发应用程序。
3. **Aware 接口处理**:Spring 会检查 Bean 是否实现了特定的 xxxAware 接口,例如 BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,然后注入相应的上下文信息。 4. **BeanPostProcessor**:如果 ...
根据给定的信息,“高级Java人才培训专家—...通过以上详细解析,可以看出“高级Java人才培训专家—spring高级49讲”涵盖了Spring框架的核心技术和高级特性,非常适合希望深入理解和掌握Spring框架的专业开发人员。
Spring 2.5.4加强了对多语言环境的支持,通过ResourceBundle和MessageSource接口,可以轻松实现应用程序的国际化和本地化。 6. **数据访问集成** 2.5.4版本对JDBC、Hibernate、JPA等数据访问技术进行了集成优化,...
首先,让我们深入理解Spring如何管理静态任务。在Spring中,静态任务通常指的是那些在应用启动时就已经定义好的定时任务。这些任务可以通过`@Scheduled`注解来声明,Spring会自动管理和执行它们。例如,你可能会创建...
- **Type1接口注入**:通过实现特定的接口(如Aware接口),容器会在实例化对象时调用相应的setter方法来注入依赖。 - **Type2设值注入**:这是最常见的依赖注入方式,通过setter方法注入依赖。 - **Type3构造子注入...
根据提供的信息,我们可以深入探讨Spring 4框架的相关知识点,包括其新特性、核心技术和关键概念。下面将逐一解析这些内容。 ### Spring Framework 总览 #### 开始与介绍 Spring Framework是一个开源的应用程序...
通过深入理解Spring的源码,我们可以更好地掌握其内部工作原理,这对于优化代码和解决复杂问题非常有帮助。Spring的设计模式和组件模型为我们提供了强大的工具,使得Java应用程序的构建更加高效和灵活。
同时,注册实现特定Aware接口的BeanPostProcessor,如ApplicationContextAwareProcessor,确保ApplicationContext可以被其他Bean感知。还注册了ResolvableDependency对象,以便于依赖注入。 4. **BeanFactory 后置...
本文介绍了Spring框架中不常见的标签和接口,包括对象的声明周期、各种Aware接口、初始化和销毁的回调方法等。通过理解和掌握这些内容,开发人员能够在特定场景下更灵活地使用Spring框架,提高代码的可扩展性和可...
通过深入学习和理解Spring Framework 3.1.0的源码,开发者不仅能掌握Spring的核心机制,还能了解到软件设计的优秀实践,提升自己的编程技能和架构能力。在实际项目中,结合源码分析,能够更有效地解决遇到的问题,...
为了在百度这样的科技公司面试中脱颖而出,候选人需要深入理解并熟练运用这些Java和Spring框架的知识点,同时展现出良好的问题解决能力、沟通技巧和团队协作精神。通过充分的准备,可以增加成功获得中级Java开发职位...
在互联网大厂的Java中级面试中,面试官通常会考察应聘者对Spring框架的深入理解和应用能力。以下是一些关键知识点的详细解析: **BeanFactory与ApplicationContext的区别** BeanFactory是Spring中最基本的容器,它...
### Spring入门知识点详解 #### Spring框架概述 - **Spring**是一个开源框架,旨在简化企业级应用的开发。作为一款轻量级的Java平台框架,Spring提供了广泛的...掌握这些知识点对于深入理解和应用Spring框架至关重要。
Spring提供了多种管理bean生命周期的方法,包括InitializingBean和DisposableBean接口的回调方法,其他Aware接口(如BeanNameAware、ApplicationContextAware等),自定义的init()和destroy()方法,以及注解@...
Spring Boot的高级话题涵盖了Spring Aware接口,如`BeanNameAware`、`BeanFactoryAware`等,它们提供了一种让Bean感知自身和Spring容器的方式。另外,多线程和计划任务(如cron表达式)也是重要的实践内容。条件注解...