【SpringBoot】在IOC之外的类中使用IOC内部的Bean

某些时候,某些类是不归IOC管的,如我们的一些Util,如何使用IOC中的Bean?

1、写一个SpringUtil类,该类用于操纵Spring的ApplicationContext

@Component的注解是需要的,该Util是要被Spring管理的。
@Component
public class SpringUtil implements ApplicationContextAware
{
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
    {
        if (SpringUtil.applicationContext == null)
        {
            SpringUtil.applicationContext = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext()
    {
        return applicationContext;
    }

    public static Object getBean(String name)
    {
        return getApplicationContext().getBean(name);
    }

    public static <T> T getBean(Class<T> clazz)
    {
        return getApplicationContext().getBean(clazz);
    }

    public static <T> T getBean(String name, Class<T> clazz)
    {
        return getApplicationContext().getBean(name, clazz);
    }
}

2、通过@Bean注解,返回一个Bean;

@Component
@Transactional
public class SysParamBusiness
{
    @Autowired
    private SysParamDao sysParamDao;

    public void modify(SysParamMO mo) throws LittleCatException
    {
        sysParamDao.modify(mo);
    }
    public String getValueByName(String name) throws LittleCatException
    {
        return sysParamDao.getValueByName(name).getValue();
    }
    public List<SysParamMO> getList() throws LittleCatException
    {
        return sysParamDao.getList();
    }

    @Bean(name="SysParamBusiness")
    public SysParamBusiness getSysParamBusiness()
    {
        return new SysParamBusiness();
    }
}

3、在我们自己的Util中使用

public class SysParamUtil
{
    public static String PARAM_NAME_MEMBER_ENABLE_DAYS = "member_enable_days";

    private static final SysParamBusiness sysParamBusiness = (SysParamBusiness) SpringUtil.getBean("SysParamBusiness");

    public static String getValueByName(String name) throws LittleCatException
    {
        return sysParamBusiness.getValueByName(name);
    }
}

注:

也可以这样使用(如果没有特殊逻辑,推荐使用这种方法):

private static final SysParamBusiness sysParamBusiness = SpringUtil.getBean(SysParamBusiness.class);

这样,第二步就可以省略了。

原文地址:https://www.cnblogs.com/njlittlecat/p/9736341.html

时间: 2024-10-09 04:54:13

【SpringBoot】在IOC之外的类中使用IOC内部的Bean的相关文章

在普通类中获取Spring管理的bean

1.在项目中添加下面的类: import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. * */ public class SpringContextHolder implem

关于类中定义的内部接口

首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口.由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能.不过你可能要质疑,更改一下方法的不就行了吗?的确,以此作为设计内部类的理由,实在没有说服力.真正的原因是这样的,java中的内部类和接口加在一起,可以的解决常被C++程序员抱怨java中存在的一个问题 没有多继承.实际上,C++的多继承设计起

在继承activity类之外的类中使用getResource()时候出现的问题解决

有几次写代码的时候都碰到了这个getResource()的使用,当时把它写在了一个普通类当中,用来加载assets当中的图片,但是代码报错.后来发现是由于这个方法是需要context的,但是最初急忙着写而没有仔细的理解,结果折腾半天也不知道怎么修改传递这个context过来,最后为了逃避这个问题,就把它放到了继承activity的类里面去了. 现在又遇到了这个问题,这下必须解决他了. 其实只要在方法调用连传context参数 或者在构造函数里面搞定 就行了: 大致代码如下: /** * 从ass

阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备

适应配置的方式解决我们刚才的编码操作 -dist结尾的就是spring 的开发包 解压好的 这里面是约束 libs是扎包 三个为一组,实际上只有21个 自己在使用需要导入jar包的时候,选择这种没有任何 一般都是打开这个index.html IOC只能解决程序之间的依赖关系 接下来将用这个工程基础之上做演示. 原文地址:https://www.cnblogs.com/wangjunwei/p/11345197.html

看完这篇你还敢说,不懂Spring中的IoC容器?

一. 什么是IoC 什么是耦合和内聚 耦合指的就是模块之间的依赖关系.模块间的依赖越多,则表示耦合度越高,相应的维护成本就越高.内聚指的是模块内功能之间的联系.模块内功能的联系越紧密,则表示内聚度越高,模块的职责也就越单一.所以在程序开发中应该尽量的降低耦合,提高内聚.也就是设计原则中的开闭原则和单一职责原则. 工厂模式 工厂模式就是用来解决程序间耦合的一种设计模式.可以把所有要创建的对象放在工厂的一个集合里,当需要使用这个对象的时候,直接从工厂里面取出来用就行. 工厂模式的优点: 一个调用者想

在spring中简单使用Mockito解决Bean依赖树问题

前提 本文不是针对Mockito的入门教学 ,主要叙述如何简单的使用Mockito解决Bean依赖树问题,对于Mockito的学习请找其他的文章或者查阅官方文档 基本概念 Junit初始化及存在的问题 spring应用在unit test时,test是独立运行的,所以需要自行 init ApplicationContext,启动 Ioc容器. Junit要求:Test类中涉及的所有Spring bean 注入成功才能完成applicationContext初始化,并启动IOC容器,否则无法执行u

【SpringBoot】 理解Spirng中的IOC原理

前言 前文已经介绍了Spring Bean的生命周期,在这个周期内有一个重要的概念就是: IOC容器 大家也知道IOC是Sping 的重要核心之一,那么如何理解它呢,它又是产生什么作用呢?本文就IOC原理进行简要阐述. IOC定义 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入. DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的

Springboot在Utils类中使用@Autowired注入

1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记工具类,初始化Bean: @Component public class MailUtil { @Autowired private JavaMailSenderImpl javaMailSender; public static MailUtil mailUtil; @PostConstruct

切点表达式定义了拦截类中所有方法,所以每个方法都被增强

1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为"切面"(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性. 2.DI 和 IOC 概念 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作