当前位置:
首页 >
spring的aware学习
发布时间:2024/9/30
40
豆豆
生活随笔
收集整理的这篇文章主要介绍了
spring的aware学习
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
简介
Spring提供的Aware接口能让Bean感知Spring容器的存在,即让Bean在初始化就可以使用Spring容器所提供的资源。
在spring中有许多继承aware接口的,常见的有:
| ApplicationContextAware | 能获取Application Context调用容器的服务 | 常用 |
| ApplicationEventPublisherAware | 应用事件发布器,可以用来发布事件 | |
| BeanClassLoaderAware | 能获取加载当前Bean的类加载器 | |
| BeanFactoryAware | 能获取Bean Factory调用容器的服务 | |
| BeanNameAware | 能获取当前Bean的名称 | |
| EnvironmentAware | 能获取当前容器的环境属性信息 | 常用 |
| MessageSourceAware | 能获取国际化文本信息 | 常用 |
| ResourceLoaderAware | 获取资源加载器读取资源文件 |
常见用法
有时候会通过工具类的形式提供相应的能力如:
@Component//也要被spring管理 public class EventPublisherUtil implements ApplicationEventPublisherAware {private static ApplicationEventPublisher eventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {if(eventPublisher == null){eventPublisher = applicationEventPublisher;}}/*** @description 发布事件*/public static void publishEvent(ApplicationEvent event){eventPublisher.publishEvent(event);} }经常会使用到利用ApplicationContext 来获取bean,如下
public class SpringUtil implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(context == null){context = applicationContext;}}public static ApplicationContext getApplicationContext(){return context;}public static Object getBean(String name){return context.getBean(name);}public static <T> T getBean(Class<T> requiredType){return context.getBean(requiredType);}public static <T> T getBean(String name, Class<T> tclass){return context.getBean(name,tclass);}public static <T> Collection<T> fetchInteClassByT(Class<T> classes){return context.getBeansOfType(classes).values();}/*** @description 发布event*/public static void publishEvent(ApplicationEvent event){getApplicationContext().publishEvent(event);}}因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务,但是,原则上我们还是用到什么接口了,就实现什么接口。我们也需要在工作多总结,体会这些不同aware的使用场景,不断积累进步。
注意
除了通过实现Aware结尾接口获取spring内置对象,也可以通过@Autowired注解直接注入相关对象,如下:
(如果需要用到静态方法中,如工具方法,还是采用实现接口的方式)
还有Spring Aware本来就是Spring设计用来框架内部使用的,如果使用了Spring Aware,你的Bean就会和Spring框架耦合。也就不能换容器了。
总结
以上是生活随笔为你收集整理的spring的aware学习的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 阿里巴巴java开发手册学习
- 下一篇: ActiveMq消费端实现集群部署