SpringBoot中单例类实现对象的注⼊⽅式
Spring Boot 单例类实现对象的注⼊
1、最近接⼿了⼀个项⽬
项⽬⽤的是SpringBoot,但其中有个类⽤的是单例,为了不改变单例,且还需要引⼊Spring管理的Bean对象
2、对于⼀个单例类按照平时的注解⽅式添加
启动时会报空指针异常,因为static类对象是创建对象后,内存中还没有注⼊Bean信息,且⽆法初始化Bean实例,这⾥的解决办法是利⽤@PostConstruct来对单例类中对象的注⼊
@Component
public class MesssageHandle implements IMessageHandler {
private final static Logger logger = Logger(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
spring boot选择题@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来注解这个构造函数。以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。