`
bugyun
  • 浏览: 556953 次
社区版块
存档分类
最新评论

spring中根据Application获取BEAN的工具类【转】

    博客分类:
  • Java
 
阅读更多

转:https://blog.csdn.net/zlj1217/article/details/81612102

 

背景

在最近的开发工作中,用到了策略模式(之前也写过关于策略模式这个设计模式的学习,但是之前那个不是在spring框架中),这时候策略中的context或者factory就要去动态的根据调用的策略类型不同去拿到对应的bean对象,这里去了解了一个通过application context拿取bean的工具类,这里记录一下。

话不多说,直接上代码

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import java.lang.annotation.Annotation;
import java.util.Map;

@Component
@Slf4j
public class ApplicationContextBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    /**
     * 利用aware注入application
     *
     * @param applicationContext
     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        // 注入application
        ApplicationContextBeanUtil.applicationContext = applicationContext;
    }

    private static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取bean
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

    /**
     * 通过class获取bean
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name和class获取bean
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    /**
     * 根据clazz类型获取spring容器中的对象
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
        return getApplicationContext().getBeansOfType(clazz);
    }

    /**
     * 根据注解类从容器中获取对象
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> Map<String, Object> getBeansOfAnnotation(Class<? extends Annotation> clazz) {
        return getApplicationContext().getBeansWithAnnotation(clazz);
    }

}

 

这是通过实现ApplicationContextAware接口去实现注入application的,这里应该注意几点: 

1. application应该是静态的。这个Util类应该是在别的类中直接调用获取bean的静态方法,所以注入的applicationContext应该都是该类的静态变量。

2. 要用注解或者在xml文件中将这个Util配置成bean。(这里用的spring boot,就直接配置的扫描)。

3. 在其中提供了一些获取bean的方法。

这里去记录下,方便在之后的工作中遇到了之后去直接使用

 

 

 

分享到:
评论

相关推荐

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...

    Spring boot工具类静态属性注入及多环境配置详解

    在静态工具类中,使用了public static的成员变量来存储配置信息,使用非静态的set方法将配置信息注入到成员变量中。其他类可以通过公有的静态get方法来获取这些配置信息。 在上面的代码中,使用了MongoConfig类来...

    普通类调用Spring bean对象

    这样,我们就能在普通类中获取到Spring管理的bean实例。 2. **@Autowired**:如果普通类也是Spring的一部分,即它也被Spring管理,那么可以使用注解`@Autowired`来自动装配bean。这样,Spring会自动找到类型匹配的...

    spring 中特殊bean用法

    例如,`@ConditionalOnClass`和`@ConditionalOnMissingClass`注解可以根据类是否存在于类路径中来决定是否注册Bean。 6. **自动装配(Autowired)**: Spring的自动装配功能可以自动将依赖注入到Bean中,无需手动...

    41. Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    `@Configuration`类表示这是一个配置类,`@Bean`注解方法表示该方法的返回值将作为一个Bean注册到Spring容器。 ```java @Configuration public class AppConfig { @Bean public HelloWorldService ...

    spring-aware接口实现与bean作用域(spring多容器层面)

    通常,`biz`层会包含应用程序的核心业务逻辑,而`support`层则可能包含工具类、数据访问对象(DAO)或其他辅助组件,它们可能都依赖于Spring管理的Bean。通过正确地配置和使用`Spring-Aware`接口以及理解Bean的作用...

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    【标题】:在Java EE环境中,使用Apache CXF与Spring框架整合实现Web服务,返回List、Bean、String、JSON及XML的完整项目实例 【描述】:本项目旨在展示如何在Java企业级应用(Java EE)中,通过Apache CXF框架创建...

    Spring运行时动态注册bean的方法

    Spring 运行时动态注册 Bean 的方法需要我们定义一个没有被 Spring 管理的控制器类,一个获取 Spring 上下文的工具类,以及在 SpringBoot 的启动类中保存当前 Spring 上下文。最后,我们可以在另一个被 Spring 管理...

    Spring获取数据源代码

    - Java配置:在Java配置类中,可以使用`@Bean`注解来创建数据源: ```java @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource....

    spring boot + mybatis + pagehelper 集成DaoUtils工具类

    本教程将详细讲解如何在Spring Boot项目中集成MyBatis和PageHelper,并创建一个实用的DaoUtils工具类。 首先,我们需要在Spring Boot项目中引入MyBatis和PageHelper的依赖。在`pom.xml`文件中添加以下依赖: ```...

    SpringBoot整合redis及工具类

    在本文中,我们将深入探讨如何将SpringBoot与Redis集成,并创建实用工具类来处理不同类型的Redis数据存储。SpringBoot以其简化微服务应用开发而闻名,而Redis则是一种高性能的键值存储系统,常用于缓存、消息队列等...

    spring中通过ApplicationContext getBean获取注入对象的方法实例

    通过`ApplicationContext`,我们可以获取到Spring容器管理的所有Bean,或者根据Bean的名称或类型来获取特定的Bean实例。本文将详细介绍如何在Spring中通过`ApplicationContext`的`getBean`方法获取注入对象,并通过...

    day38 17-Spring的Bean的属性注入:注解方式

    例如,`@Value("${property.name}")`可以从`application.properties`中获取配置。 4. **@Resource**:与`@Autowired`类似,但主要基于名称匹配,通常用于JSR-250规范的注入。 接下来,我们看看如何在实际应用中...

    利用spring的ApplicationContext在程序中唤醒quartz的job

    在测试类中,我们可以看到如何初始化`Scheduler`实例,以及如何使用`ApplicationContext`获取Job类的Bean并添加到调度器中。例如,`TestQuartzTimer`可能有以下代码片段: ```java @Autowired private ...

    消息队列监听器无法注入bean的问题解决

    如果使用了`BeanUtil`,则需确保工具类中的bean获取逻辑无误。 解决这个问题的一般步骤包括: 1. **检查配置**:仔细审查`dubbo_consumer.xml`和`spring-rabbitmq.xml`,确保所有配置正确无误。 2. **调试代码**:...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    方法二:通过 Spring 提供的工具类获取 ApplicationContext 对象 在 B/S 系统中,通过 ServletContext 对象可以获取 WebApplicationContext 对象,然后通过它获取需要的类实例: `import org.springframework.web....

    spring jar包

    1. **spring-beans.jar**:包含Bean工厂和依赖注入的相关类,如`org.springframework.beans.factory`包下的BeanFactory接口和实现,以及`org.springframework.beans`包下的各种Bean处理工具类。 2. **spring-core....

    JSF和Spring集成.doc

    下面是对该工具类中的关键方法进行详细解析: - **findBean 方法**:该方法首先通过 `FacesContext` 获取当前的 `ServletContext`,然后使用 `WebApplicationContextUtils.getRequiredWebApplicationContext` 方法...

    redis和spring整合

    在Spring配置类中,定义一个`RedisTemplate` bean,配置序列化方式,这里我们使用JdkSerializationRedisSerializer和StringRedisSerializer: ```java @Bean public RedisTemplate, Object&gt; redisTemplate...

Global site tag (gtag.js) - Google Analytics