java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring的@Scope注解

详解Spring中的@Scope注解

作者:小星向上

这篇文章主要介绍了详解Spring中的@Scope注解,@Scope注解是Spring IOC容器中的一个作用域,在Spring IOC容器中,他用来配置Bean实例的作用域对象,需要的朋友可以参考下

@Scope

Spring管理的Bean默认是单例的

@Scope ("prototype") 通过注解可以实现多个实例的解决

Spring定义了多种作用域,可以基于这些作用域创建bean,包括:

具体的应用大家可以去自己试试

单例 demo

@Controller
public class TestController {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

结果

我们多次从context里面去getBean的时候,都是返回的同一个对象

业务场景需要每次都获得是新的对象

解决方案1:@Scope("prototype")注解

打印结果

当我们从spring上下文中获取对象的时候,返回的是不同的对象

解决方案二:Bean工厂后置处理器

我们都知道,所有的扫描的类信息都会被封装成BeanDefine的形式,最终通过扫描的Bean定义信息来创建具体的对象,所以我们可以通过Bean工厂后置处理器来修改Bean定义信息达到我们目的

/**
 * BeanFactoryPostProcessor bean工厂后置处理器 : 修改bean定义
 */
@Component
public class FactoryPostProcesser implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        BeanDefinitionRegistry beanDefinitionRegistry =  (BeanDefinitionRegistry)configurableListableBeanFactory;
        BeanDefinition testController = beanDefinitionRegistry.getBeanDefinition("testController");//拿到bean定义信息
        testController.setScope("prototype");//修改bean的scope属性
    }
}

Test Controller里面还是之前的代码

打印结果:

到此这篇关于详解Spring中的@Scope注解的文章就介绍到这了,更多相关Spring的@Scope注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文