服务器之家

服务器之家 > 正文

Spring Boot中单例类实现对象的注入方式

时间:2021-11-02 13:10     来源/作者:「已注销」

Spring Boot 单例类实现对象的注入

1、最近接手了一个项目

项目用的是SpringBoot,但其中有个类用的是单例,为了不改变单例,且还需要引入Spring管理的Bean对象

2、对于一个单例类按照平时的注解方式添加

启动时会报空指针异常,因为static类对象是创建对象后,内存中还没有注入Bean信息,且无法初始化Bean实例,这里的解决办法是利用@PostConstruct来对单例类中对象的注入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
public class MesssageHandle implements IMessageHandler {
   private final static Logger logger = LoggerFactory.getLogger(MesssageHandle.class);
   private static MesssageHandle instance = new MesssageHandle();
   @Autowired
   private ScheduleService scheduleService;
   private MesssageHandle(){ }
   public static MesssageHandle getInstance() {
      return instance;
   }
 
   @PostConstruct
   public void init(){
      instance = this;
      instance.scheduleService = this.scheduleService;
   }

spring boot的对象注入

1、需求

现在我们的项目中需要引入一个java类库,我想要很方便的使用该类库中的一个类,并且我想要创建这个类的一个单例对象。然后可以很方便的在各个模块中用@AutoWired进行对象注入。

比如一个配置文件,我在一个地方创建Configuration对象,读取配置文件中的配置,然后在各个模块中使用该对象。

2、需求分析

这个需求涉及到两个问题

一个是单例对象的创建;另外一个是单例对象的引用。因为,你要用一个对象,你首先得创建它。创建一个对象在Spring中有固定的模式,在定义类的时候使用@Component注解,@Component默认是单例的。这样spring framework在进行component scan的时候就会创建这个对象。用的时候很简单,只需要@Autowired就可以了。

@Autowired最好使用构造器注入,也就是说,不是直接将@Autowired放在成员变量上面,而是放在构建函数上面,然后通过构造函数的参数注入。为何要这么麻烦?

3、Spring boot是对spring使用的简化

所以这整个的过程也是Spring boot所具备的能力。

4、以上分析的是自己创建的类对象注入

现在如果用这种对象注入来使用成熟的包中的对象呢?

4.1 使用配置文件生成bean

?
1
<bean class="xxx"></bean>

4.2 使用@Configuration注解生成bean

?
1
2
3
4
5
6
7
@Configuration
public class AppConfig {
    @Bean(name = "timedCache")
    public TimedCache<String, Muser> listStrBean() {
        return new TimedCache<String, Muser>(30 * 6000);
    }
}

5 各个常用的注解

5.1 dao

@Repository

5.2 model

不需要注解

5.3 restful的controller

@RestController

5.4 service

service接口处不用,在接口的实现类处用@Service

6 关于@Autowired

要用到另外一个类的对象时,首先定义一个引用。

然后在本类的构造函数中给该引用赋值,然后将@Autowired来注解这个构造函数。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/xtss999/article/details/89139745

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部