1..通过构造器,把容器管理的对象当做参数传进去。
在普通类里添加一个属性(这个属性就是容器管理的对象),再生成这个属性的有参构造器。然后在其他被容器管理的类中new一个这个普通类的对象,然后给这个对象赋值。
private MqttClient mqttClient; //被容器管理的对象---属性
public MqttConsumer(MqttClient mqttClient) { //属性的构造器
this.mqttClient = mqttClient;
}
MqttConsumer mqttConsumer = new MqttConsumer(mqttClient);
2..通过setter方法
在普通类里添加一个属性(这个属性就是容器管理的对象),生成属性的setter方法。在其他被容器管理的类中new一个这个普通类的对象,并设置对象的属性。
private MqttClient mqttClient; //属性
public void setMqttClient(MqttClient mqttClient) { //setter方法
this.mqttClient = mqttClient;
}
MqttConsumer mqttConsumer = new MqttConsumer();
mqttConsumer.setMqttClient(mqttClient);
3.创建一个类实现ApplicationContextAware接口,在类中完成获取对象的方法。(推荐。固定写法,可以粘贴使用)
@Component
public class SpringContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> clazz){
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String name,Class<T> clazz){
return applicationContext.getBean(name,clazz);
}
}