Spring Aware获取Bean和其他对象

  Spring的容器托管了所有bean,实际项目中我们经常会用到容器中的功能资源,这时候就用到了 Spring Aware。简单来说,就是Spring Aware可以帮助你获取到Spring容器中的Bean或者其他资源。

  Spring 提供的Aware接口如下:

    BeanNameAware          :获取到容器中Bean的名称

    BeanFactoryAware          :获得当前bean factory,这样可以调用容器的服务

    ApplicationContextAware*       :当前的ApplicationContext,这样可以调用容器的服务

    MessageSourceAware          :获得message source,这样可以获得文本信息

    ApplicationEventPublisherAware  :应用事件发布器,可以发布事件

    ResourceLoaderAware       :获得资源加载器,可以获得外部资源文件

  Spring Aware的目的是为了让Bean获得Spring容器的服务。因为ApplicationContext接口集成了MessageSource接口、ApplicationEventPublisher接口和ResourceLoader接口,所以Bean继承ApplicationContextAware可以获得Spring容器的所有服务。

  例子:

/**
 * spring工具类,可获取spring容器中的bean
 * create by en
 * at 2019/1/23 16:43
 **/
@Component  // 必须是 spring bean 才能成功执行下面方法
public class SpringUtil implements BeanFactoryAware {       // 实现BeanFactoryAware,获取 BeanFactory

    private static BeanFactory beanFactory;

    // 重写 setBeanFactory 方法,获取 BeanFactory
    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }

    public static <T> T getBean(Class<T> c) {
        return beanFactory.getBean(c);
    }

    public static <T> T getBean(String name) {
        return (T) beanFactory.getBean(name);
    }

}

但是需要注意Spring Aware本来就是Spring设计用来框架内部使用的,若使用了Spring Aware,你的Bean将会和Aware框架耦合。

原文地址:https://www.cnblogs.com/effortn/p/10310641.html

时间: 2024-08-28 20:27:57

Spring Aware获取Bean和其他对象的相关文章

Spring中获取被代理的对象

目录 Spring中获取被代理的对象 获取Spring被代理对象什么时候可能会用到? Spring中获取被代理的对象 Spring中获取被代理的对象 ### 获取Spring被代理对象的JAVA工具类 ? Spring采用CGLIB或者JDK动态代理来实现AOP,那如何获取 被代理对象?通过ApplicationContext.getBean()获取到的对象都是 利用字节码动态生成的 增强对象,那假如我们有场景获取 被代理的对象,方式如下: (封装到工具类形式里面,直接通过getTrueTarg

使用spring手动获取Bean的时候,不能强转回它自己。

这个问题好像有点长,描述一下: 就是通过类名的方式获取Bean后,得到一个Object对象,但是这个Object不能再强转回Bean了.抛出的异常时类型转换异常.  java.lang.ClassCastException 还有一个现象就是,本来自己对类进行注解了,但是用类名获取的时候,获取不到,抛出的异常时找不到类. org.springframework.beans.factory.NoSuchBeanDefinitionException 还有一个是 java.lang.AbstractM

【Spring 系列】一、如何从spring中获取bean

导包 spring要管理的类信息 package com.liuyong666.service.impl; ? import com.liuyong666.service.PersonService; public class PersonServiceBean implements PersonService { @Override public void save(){ System.out.println("我是save()方法"); } } spring面向接口编程,该类对应的

spring中获取bean的方式

获取bean的方式 1.可以通过上下文的getBean方法 2.可以通过@Autowired注入 定义controller @RestController @RequestMapping("/api") public class ApiUserController { /** * 上下文对象实例 */ @Autowired private ApplicationContext applicationContext; @Autowired private IUserService use

spring中获取Bean

在测试类中我们获取已经装配给容器的Bean的方法是通过ApplicationContext,即 ApplicationContext ac=new ClassPathXmlApplicationContext("com/selrain/introduce/beans.xml"); 然后调用getBean方法获取相应的对象. 那么web应用中我们怎么获取呢,可以通过spring提供的WebApplicationContextUtils类获取 该类的getRequiredWebApplic

spring直接获取bean定义

转:http://blog.csdn.net/sdandan/article/details/7911241 ———————————————————————————————————————— BeanFactory为一个管理bean的工厂(即为spring的容器),它管理的对象可以是bean也可以是FactoryBean(这种请况会再调用FactoryBean的getObject()获取真正的bean). FactoryBean为一个工厂bean,受BeanFactory管理. 先来看一看Bea

mvn中,使用spring中获取bean实例

由于spring官方的例子都是用maven进行代码管理, 我打算以后的代码也用maven进行管理. spring一个重要的优点就是Ioc,也就是控制反转,可以用xml文件来生成类的实例.我以前都是用eclipse下的tomcat方式来管理bean实例,用spring自带的spring tool suits管理还有点不习惯,不过生产工具都是不断优化的,所以这里也学着习惯使用. 配置文件可以放在resources文件夹下,具体目录为src\main\resources,src下的另一个文件是java

Spring中获取Bean的几种方式

ApplicationContext 的主要实现类: 1.ClassPathXmlApplicationContext:从 类路径下加载配置文件 2.FileSystemXmlApplicationContext: 从文件系统中加载配置文件 3.ConfigurableApplicationContext 扩展于 ApplicationContext,新增加两个主要方法:refresh() 和 close(), 让 ApplicationContext 具有启动.刷新和关闭上下文的能力 4.Ap

Spring Aware

Spring的依赖注入最大亮点就是你所拥有的Bean对Spring容器的存在是没有意识的.即你可以将你的容器换成别的容器,如GOOGLE Guice,这时Bean之间的耦合度降低. 但是在实际的项目中,你不可避免的要用到Spring容器本身的资源,这时你的Bean必须要意识到Spring容器的存在,才能调用Spring所提供的资源,这就是所谓的Spring Aware.其实Spring Aware本来就是Spring设计用来框架内部使用的,如果使用了Spring Aware,那么你的Bean其实