1、默认单例 @Autowired
2、多例
定义
import org.springframework.context.annotation.Scope;
@Component
@Scope("prototype")
使用
import org.springframework.beans.factory.ObjectFactory;
@Autowired
private ObjectFactory<DutyChain> dutyChainObjectFactory;
DutyChain dutyChain = dutyChainObjectFactory.getObject();
这里每次getObject()都相当于new一个对象
即使是多例里面的某一对象是单例注入的,那多例里面的该对象还是单例,不用担心
3、通过new的方式是无法实例化类中的对象的
而通过@Autowired是可以注入到对象中所有注解@Autowired的对象,但是@Autowired只能作用于Field上,如果想通过Spring注入局部对象,可以通过实现 ApplicationContextAware 接口
@Component
public class DemoApplicationManager implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
DemoApplicationManager.applicationContext = applicationContext;
}
public static void autowire(Object var1) {
applicationContext.getAutowireCapableBeanFactory().autowireBean(var1);
}
}
这样使用,就可以实现局部变量的自动注入
DemoApplicationManager.autowire(dutyChainDefault);