spring配置文件中注入
配置文件:applicationContext.xml
mybatis映射文件和元素关联映射
Spring AOP切面类和环绕通知的使用
<!-- AOP系统监控日志管理的配置-->
<!-- AOP配置:增强业务实现类配置-->
<bean id="SYSLogAdvice" class="com.yuw.advice.SYSLogAdvice"></bean>
<aop:config>
<!-- AOP配置:切入点的配置(规范了构成切入点的连接点的范围)-->
<!--
expression表达式用于标识符合哪些规范要求的连接点(方法)可以构成切入点:
解析expression表达式:
execution()是固定格式,表示范围表达式写在括号中;
表达式:* com.yuw.service.*.*(..) 解析:
第一个 * 表示方法的返回值类型为任意类型,包括 void;
com.yuw.service表示目标方法所在的包路径名;
com.yuw.service.* 表示这个包路径下的所有的类;
*(..)是一个整体,其中(前面的*表示任意的方法名; 当然可以使用前缀或者后缀配合型号通配符;例如 do* 表示以do开头的方法;
其中()表示方法定义时的();
其中括号中的 .. 表示方法声明定义时的形参列表;
例如:
boolean com.yuw.service.serviceimpl.UserInfoServiceImpl.doLogin()
-->
<!-- 下面的pointcut配置表示在 com.yuw.service包下面的所有的类的所有的方法都可以构成本次配置的切入点-->
<aop:pointcut id="sysLogging"
expression="execution(* com.yuw.service.*.do*(..))"/>
<!-- AOP配置:切面的配置-->
<!-- aspect配置中 ref表示引入的增强处理的类 (ref表示切面的业务逻辑由那个类来处理)-->
<aop:aspect id="myAspect" ref="SYSLogAdvice">
<!-- 对织入的配置:织入的时机点有 before、after、around-->
<!-- 将连接点和增强进行织入,织入的时机点是before,也就是方法执行之前进行增强处理
before表示连接点和增强触发的时机点;
method表示进行增强的类中有那个方法完成此次的业务逻辑处理;
pointcut-ref:表示此次增强处理和那些连接点进行结合(切入点和增强之间的结合)
-->
<aop:before method="sysLogging" pointcut-ref="sysLogging"></aop:before>
</aop:aspect>
</aop:config>
SpringMVC 文件上传操作
什么是控制反转、依赖注入,依赖注入的实现方式事务特性和Spring的事务实现分类,使用什么注解声明事务
2.1 依赖注入和控制反转的概念
依赖注入:
spring容器根据托管在容器中的javabean之间的依赖关系(组合关系),根据需要将spring容器创建的实例对象注入(赋值)给组合的属性对象;
也就是,Spring容器根据javabean之间类与类之间的组合关系,将被组合的实例对象进行自动初始化赋值;【省略了手动new初始化赋值的过程】
控制反转:
控制反转是依赖注入的另一方面的理解;
在spring容器中,javabean之间的类与类之间存在组合关系,当一个类组合了另外一个类,这个类将被组合的对象的初始化控制权托管给spring容器进行处理,
这就是控制反转;
也就是,一个类将其内部组合的其他的类初始化控制权“反转”给spring容器;由spring容器负责将这些被组合的类进行自动初始化赋值;
总结:
依赖注入和控制反转是同一个事务的两个不同角度的理解:
从spring容器角度看:依赖注入是spring容器根据javabean 之间的组合关系,完成自动初始化赋值;
从javabean的角度看:控制反转就是将该类中组合的实例对象的是初始化控制权交给spring容器进行管理,完成自动初始化赋值;
2.2 依赖注入和反转控制的实现
(1) setter接口的方式实现
给需要进行依赖注入的属性提供setter接口,并在spring配置中使用property标签进行配置;
(2) 构造方法的方式实现
需要提供指定参数的构造方法;【注意:是否需要显式写出默认的构造方法】
事务特性和spring事务实现分类,使用什么注解声明事务
事务特性:ACID原子性、一致性、隔离性Isolation、持久性
基于@transactional注解的声明式事务管理
Spring Bean作用域
singleton:(默认)再spring IOC容器中仅存一个Bean实例,Bean以单例方式存在
prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,
相当于执行 new XxxBean()
request:每次Http请求都会创建一个新的Bean,
该作用域仅适用于WebApplicationContext环境
session :同一个Http Session共享一个Bean,不用Session使用不同Bean,
仅适用于WebApplicationContext环境
globalSession:一般用于Porlet应用环境,
该作用域仅适合与WebApplicationContext环境
SpringMVC工作原理
SpringMVC控制器接收请求参数的常见方式有哪几种?
MyBatis元素
Spring基于注解的自动装配。
1.byName:把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中。如果没有与属性的名字相匹配的Bean,则该属性不进行装配。
2.byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。如果没有与属性的类型相匹配的Bean,则该属性不进行装配。
3.constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中。
4.autodetect:先按constructor来装配,失败了按byType来装配。
MyBatis如何处理实体类中的属性名和表中的字段名不一致的情况
解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。