Spring 问题整理

1、【切面AOP使用场景? AOP 代理了(三级缓存机制)?】

2、控制反转ioc与依赖注入DI(dependency injection)理解:

简单来说,之前我们需要一个对象,就需要创建一个对象,哪里用哪里创建,而通过spring的控制反转,它把对象都同意管理了起来,当我们需要用的时候,只需要通过注入的方式去取这个对象就好了,至于这个对象什么时候创建的,在哪里创建的,我们不用去关心,举个例子,在activit中,当spring把它集成过来之后,它里面所包含的对象就被spring给管理起来了,我们需要使用他的任务管理也好、模型管理也行,只需要向spring去取就行了,至于他的生命周期是如何管理的,我们不用去关心,开箱即用就好了

3、关于循环依赖问题

循环依赖这个问题现象很好描述,就是A里用了B,B里用了A,这种现象很常见,而且大多数情况下我们都会遇到这种现象,但大部门情况下没问题,
比如说,很多场景下,依赖注入时,我们选择的方式是成员变量注入的方式,这种方式就不会触发循环依赖,即便是出现A、B互相调用的情况,为什么呢?因为成员变量注入与setter方法注入,是在Bean创建完成之后,初始化对象的时候才会出现,而只有在构造方法注入时才会出现这种情况,因为构成方法注入时,是在实例化阶段发生的,而其他注入方式是在初始化阶段发生的,
而默认情况下,spring默认作用域是单例,在单例作用域下,在spring启动时,就把所有的bean都创建好了,同时在创建bean实例时,处理循环依赖问题

问题:{
	The dependencies of some of the beans in the application context form a cycle:

   mqttController defined in file [D:\CodeProject\ops-parent\ops-facility\target\classes\com\szy\ops\box\controller\MqttController.class]
	  ↓
   orderManager (field private com.szy.ops.workflow.service.IWfProcessService com.szy.ops.web.order.service.manager.OrderManager.processService)
	  ↓
   IWfProcessServiceImpl defined in file [D:\CodeProject\ops-parent\ops-facility\target\classes\com\szy\ops\workflow\service\impl\IWfProcessServiceImpl.class]
	  ↓
   taskServiceBean defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
┌─────┐
|  processEngine defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
↑     ↓
|  springProcessEngineConfiguration defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
↑     ↓
|  activiti7Config (field private com.szy.ops.workflow.listener.GlobalEventListener com.szy.ops.workflow.config.Activiti7Config.globalEventListener)
↑     ↓
|  globalEventListener (field private org.activiti.engine.HistoryService com.szy.ops.workflow.listener.GlobalEventListener.historyService)
↑     ↓
|  historyServiceBean defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
└─────┘
}
	这里就出现了循环依赖问题,怎么处理呢?就用@Lazy 注解就可以了,@Lazy简单来说就是懒加载,只有在被访问时才会被实例化、初始化,具体原理就是通过创建一个【代理对象】来实现延迟化
{
	@Component
	public class GlobalEventListener implements ActivitiEventListener {

		@Autowired
		@Lazy
		private HistoryService historyService;
	}
}

4、【实例化Bean】,反射的方式生成对象?

5、bean的生命周期:https://gitee.com/fangguochao/spring_bean_life.git

6、spring用了哪些设计模式?【设计模式的理解】

7、spring事务管理

上一篇:MySQL Spring JDBC API JdbcTemplate日期时间字段的测试使用


下一篇:python可变数据类型和不可变数据类型