java工作三年面试题------spring(1)

前言:spring作为java的核心框架,提供了企业级开发的全套解决方案,并且相当容易整合其他的模块,其2大核心属性(IOC和aop),为框架的简便和效率打下基础

1.spring ioc的含义,如何实现依赖注入,依赖注入有哪些方式?

spring ioc 指的是spring创建对象的容器,核心思想是spring将本该由应用程序本身创建的对象,由spring接管,在项目启动的时候将对象创建到ioc容器中,并且通过set注入或者其他的方式,注入到应用程序里面去,实现了对对象创建的统一管理,避免了应用程序创建时的对资源的消耗。

获取ioc对象的方法
1.可以直接通过application对象实现其接口实现的方式直接获取


	static ClassPathXmlApplicationContext wac;
	
	private static IdentityService identityService;
	
	private static RuntimeService runtimeService;
	
	static StandardWorkFlowDao standardWorkFlowDao;
	
	
	private static TaskService taskService;
	
	static{
			
		
			String[] config = new String[]{"spring-context.xml","spring-context-activiti.xml"};
			System.out.println("文件加载中。。。。");
			wac = new ClassPathXmlApplicationContext(config);
			identityService =  wac
					.getBean(IdentityService.class);
			
			runtimeService =  wac
					.getBean(RuntimeService.class);
			
			taskService = wac
					.getBean(TaskService.class);
			
		
			
		}


	/*
	 * 启动工作流
	 * **/
	@Test
	public void startProcess() {
		// 角色启动流程
		identityService.setAuthenticatedUserId("thinkgem");
		Map<String, Object> vars = new HashMap<String, Object>();
		
		vars.put("title", "卡片试流程测试");
		
		//StandardWorkFlow flow = new StandardWorkFlow();
		String procDefKey  = "hqprocess";
		
		String businessTable = "STANDARD_WORKFLOW";
		
		String businessId = "card001";
		
		ProcessInstance procIns = runtimeService.startProcessInstanceByKey(procDefKey, businessTable+":"+businessId, vars);
		
		
		System.out.println("procIns:"+procIns);
		
		
	}

2.或者在项目启动的时候通过set方法或者@Autowaire直接注入到项目中

spring依赖注入的方式
1.设值注入:设值注入是指 IoC 容器使用属性的 setting 方法来注入被依赖的实例。
2.构造注入:在构造实例时,已为其完成了依赖关系的初始化。这种利用构造器来设置依赖关系的方式,被称为构造注入。
3.使用@autowaire注解

2.spring aop是啥意思,如何实现的?

AOP 实际上一种编程思维,面向切面编程的意思,是基于java代理模式

aop基本的要素:

一 AOP的基本概念

(1)Aspect(切面):通常是一个类,里面可以定义切入点和通知

扫描二维码关注公众号,回复: 11572396 查看本文章

(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用

(3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

(4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式

(5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类

3.spring 事物处理

事物:简单点说就一系列事件要么全部都发生,要不全部都不发生

其中的一些概念的说明:

==脏读: 指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一 个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

不可重复读: 指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。 那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

幻觉读:指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及 到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,就会发生操作第一个事务的用户发现表中还有 没有修改的数据行,也就是说幻像读是指同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读,就好象发生了幻觉一样==

脏读: 指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一 个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

不可重复读: 指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。 那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

幻觉读:指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及 到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,就会发生操作第一个事务的用户发现表中还有 没有修改的数据行,也就是说幻像读是指同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读,就好象发生了幻觉一样

另外四个与 JDBC的隔离级别相对应:

  1. ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它允许令外一个事务可以看到这个事务未提交的数据,

这种隔离级别会产生脏读,不可重复读和幻像读。

  1. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据

  2. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。

  3. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。

除了防止脏读,不可重复读外,还避免了幻像读

spring 的事物处理一般发生在service层,也容易理解,一般业务处理都发生在这一层

spring 是如何处理事物
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jiangwudidebaba/article/details/105706275