一、Spring
通俗的说,接口是一种在沟通中的说明,说明了我会提供什么,而不公开内部的逻辑,对应java中的接口,声明了那些方法是对外提供的。
结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类。
通俗的说就是当我们需要一个对象的时候我们不需要New一个,而是由外部容器给我们申请一个来用。比如,我们要住房子,我们通常不会重新建一个,而是找房产中介买来一个现成的房子来用,所以我们并不负责这个容器的创建,我们只负责这个容器的使用。IOC目的是创建对象并且组装对象之间的关系。
依赖注入(DI):是IOC实现的一种方式。就是在IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
(1,基于xml文件的配置 2,注解) 在spring中,所有的对象都叫做Bean
@Configuration,@Bean,@Import,@DependsOn
@Component是一个通用注解,可以用于任何bean
@Repository,@Service,@Controller是更有针对性的注解
@Repository通常用于注解DAO类,即持久层
@Service通常用于注解Service类,即服务层
@Controller通常用于注解Conroller类,即控制层(MVC)
@Required注解适用于bean属性的setter方法,这个注解仅仅表示受影响的bean属性必须在配置时被填充
@Autowired可用于构造器或者成员变量上,可@Autowired(required=false)避免找不到合适的bean而抛出异常,可以注解那些众所周知的解析依赖性接口,如:BeanFactory等
@Qualifier按类型自动装备可能多个bean实例的情况,可以缩小注解的范围
@Resource用于成员变量、只有一个参数的setter方法,如果没有指定其名字name则默认的是方法名或者变量名
@Bean标识一个用于配置和初始化一个由SpringIoc容器管理的新对象的方法,类似于XML配置文件的,可以在Spring的@Component注解的类中使用@Bean任何方法,通常和@Configuration配合使用@ImportResource引入一个资源,@Value写具体值
元注解:注解的注解
默认情况下,类被自动发现并注册bean的条件是:使用@Component@Repository@Service@Controller注解或者使用@Component的自定义注解
Spring可以自动检测类并注册Bean到ApplicationContext中,比如@service,@repository等
可以通过过滤器进行自定义扫描
基础:两个包(org.springframework.beans和org.springframework.context)
BeanFactory提供配置结构和基本功能,加载并初始化Bean;
ApplicationContext保存了Bean对象并在Spring中被广泛使用
Bean的配置项:Id,Class,Scope,Constructor arg,Properties等
Bean的作用域(scope):
singleton(单例):指一个Bean容器中只存在一份
protorype:每次请求创建新的实例,destory方式不生效
request:每次http请求创建一个实例且仅在当前request内有效
session:同上,每次Http请求创建,当前session有效
global session:基于portlet的web有效,如果是在web中,同session
Bean的生命周期:定义,初始化,使用,销毁
Bean的自动装配(Autowiring):No:不做任何操作 byname:根据名字 byType:根据类型 Constructor:与byType类似
Resources:针对于资源文件的统一接口
ResourceLoader:对resources加载
1 下载junit-*.jar并引入工程
2 创建UnitTestBase类,完成对Spring 配置文件的加载销毁
3 所有的单元测试类都要继承来自UnitTestBase,通过它的getBean方法获取想要的对象
4 方法加注解@Test
5 右键选择要执行的单元测试方法执行或者执行一个类的全部单元测试方法
面向切面编程,实现程序功能的统一维护的一种技术,主要功能是日志记录,性能统计,安全控制,事务处理,异常处理等等。(切面和功能是垂直的)
预编译(AspectJ)和运行期动态代理(SpringAOP,JbossAOP)
提供了声明式的企业服务;允许用户定制自己的方面,以完成OOP与AOP的互补使用。
纯java实现,无需特殊的编译过程;侧重于提供一种AOP实现和Spring Ioc容器之间的整合,帮助解决企业应用的常见问题。
事务:逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
事务特性:原子性(事务是一个不可分割的工作单位,要么全部发生,要么都不发生);一致性(事务前后数据的完整性保持一致);隔离性(多个用户并发访问数据库时,一个用户的事务不受干扰,数据相互隔离);持久性(事务一旦被提交,数据库中的数据的改变就是永久性的,即时数据库发生故障也不受影响)
PlatformTransactionManager事务管理器
TransactionDefinition事务定义信息(隔离级别,传播行为,超时,只读)
二、SpringMVC
MVC的核心思想是业务数据抽取同业务数据呈现相分离
DispatcherServlet+Controller
1,基本Controller编写
2,Binding数据绑定:将请求中的字段按照名字匹配的原则填入对象模型
3,文件上传Upload
4,JSON协同工作:将相同的数据呈现出不同的表现形式,满足不同需求
5,拦截器:处理请求的一些共同问题
5.1解决乱码问题等,跟过滤器原理非常相似;解决权限验证问题
5.2拦截器的三个方法:preHandle,postHandle,afterCompletion
5.3,配置多个拦截器
5.4,拦截器和过滤器的区别
过滤器filter依赖于Servlet容器,过滤范围大,拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求
三、MyBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射.通俗地说它可以自定义sql语句,大量减少了代码的编写。
1,spring-dao.xml:
spring与dao(mybatis)的整合
·数据库的配置
·连接池的属性配置
·与mybatis的配置,sqlsessionFactory
·与dao层配置,动态实现dao并注入到spring
spring-ioc注入方式:
xml:bean实现来自第三方类,比如datasource,如命名空间context,aop等
注解:项目自身开发使用的类,可以直接在代码中使用注解,如@Service等
spring使用方式:xml配置+package-scan+Annotation注解
2,spring-service.xml:
1、扫描service包下所有使用注解的类型
2、配置事务管理器
3,spring-web.xml:
就是springMVC的配置
1、开启注解
2、加载静态资源
3、加载jsp文件,前缀后缀
4、扫描controller包
4、 web.xml
1、修改版本为3.1
2、将ssm的配置文件整合在一起
5、mybatis.config.xml
mybatis的全局配置
6、pom.xml
maven依赖:
1、junit测试包
2、日志包
3、数据库连接以及连接池
4、框架层dao的mybatis包,Mybatis与spring的整合
5、servlet-web包(标签,jackson等)
6、spring包(核心包core,beans,context,),spring-jdbc,spring-web,spring-test