Spring Boot中单例类实现对象的注入方式
Spring Boot 单例类实现对象的注入
1、最近接手了一个项目
项目用的是SpringBoot,但其中有个类用的是单例,为了不改变单例,且还需要引入Spring管理的Bean对象
2、对于一个单例类按照平时的注解方式添加
启动时会报空指针异常,因为static类对象是创建对象后,内存中还没有注入Bean信息,且无法初始化Bean实例,这里的解决办法是利用@PostConstruct来对单例类中对象的注入
@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
<bean class="xxx"></bean>
4.2 使用@Configuration注解生成bean
@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来注解这个构造函数。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
vue+springboot读取git的markdown文件并展示功能
Markdown-it 是一个用于解析和渲染 Markdown 标记语言的 JavaScript 库,使用 Markdown-it,你可以将 Markdown 文本解析为 HTML 输出,并且可以根据需要添加功能、扩展语法或修改解析行为,本文介绍vue+springboot读取git的markdown文件并展示,感兴趣的朋友一起看看吧2024-01-01springBoot整合jwt实现token令牌认证的示例代码
实施Token验证的方法挺多的,还有一些标准方法,比如JWT,本文主要介绍了springBoot整合jwt实现token令牌认证的示例代码,具有一定的参考价值,感兴趣的可以了解一下2024-08-08
最新评论