您当前的位置: 首页 >  spring

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring中注解方式下Bean的作用域

梁云亮 发布时间:2021-11-17 23:48:21 ,浏览量:1

简介

Spring bean 作用域默认是 单例 singleton;可以通过配置 prototype实现多例;

被注入到Spring中的类
  • Account.java
@Scope("singleton")
@Component
public class Account {
}
  • User.java
@Scope("prototype")
@Component
public class User {
}

注:Scope的值,也可以使用下面的方式指定: 在这里插入图片描述

测试代码
public class ScopeTest {

    @Test
    void fun() {
        ApplicationContext act = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");

        Account account1 = (Account) act.getBean("account");
        System.out.println(account1);
        Account account2 = (Account) act.getBean("account");
        System.out.println(account2);

        User user1 = (User) act.getBean("user");
        System.out.println(user1);
        User user2 = (User) act.getBean("user");
        System.out.println(user2);
    }

}
结果

在这里插入图片描述

Spring使用注解注入多例的方式

在需要多例调用的类上加@Scope("prototype") 在进行注入时,不能直接使用@Autowired,否则注入的还是单例,需要使用工厂,最简单的是用

@Autowired
private ObjectFactory objectFactory;

对象进行注入(T为你要注入的类),想要使用该多例对象时,使用如下方法:

T t = objectFactory.getObject();
结论
  • 单例情况下,容器创建时调用方法创建对象到容器中,在程序中调用bean,直接从容器中拿取,且每次拿取的都是同一个对象。如果上一次对bean里的属性做了修改,那下一次拿取的就是修改过的bean。
  • 多例情况下,容器创建完成时不调用方法创建对象到容器中,在程序中获取时,才会将对象加载到容器中,而且每次调用生成的都是不同的对象。
  • 不要在Spring管理的类中添加状态信息。
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0486s