1.什么是框架

说明:将公共的模块(功能)进行高级的抽取(接口/父级)形成了通用的代码体。
使用:引用特定的jar包/class/方法 既可以使用框架中的功能
实际意义:简化 代码的开发,提高软件的扩展性

2.Spring框架

2.1 Spring介绍

主要作用就是将其他框架进行整合(角色:框架的大管家)
是针对bean的生命周期进行管理的轻量级容器,提供了功能强大IOC.AOP及Web MVC等功能。
Spring框架主要由七部分组成,分别是Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web和Spring Web MVC
知识讲解:Bean:被spring容器管理的对象称之为bean

2.2 MVC模型

说明:在大型项目中由于模块众多,如果将所有的项目都写在一起则代码特别的混乱,不便于后期的维护。所有通过MVC设计模型,将代码进行分级
实现步骤:分为3级
1.M(Model):持久层 代码与数据库进行交互的代码(Mybatis-dao/mapper层)
2.V(View):视图层 一般只用户看到的内容(页面)
3.C(Controller):控制层 完成某项业务的具体操作过程(Controller层–Service层)

MVC模型 大型项目的结构设计 设计思想:解耦
3层代码结构:Controller/Service/Dao 设计思想的具体实现方式

3.IOC思想

3.1 问题说明

说明:传统的代码是直接通风new的方法创建对象,这样的方式将对象与对象紧紧的绑到一起,不便于代码的扩展 所以需要进行松耦合处理

3.2 IOC说明

控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度,其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。通过控制反转,对象在被创建的时候,由一个调度系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
说明:将对象创建的权利交给spring管理,由spring(第三方)管理对象的生命周期(创建/初始化/使用/销毁)

3.3 Spring IOC的具体实现

1.创建实体对象
2.创建一个application.xml的配置文件,里有一个bean标签的对象
3.在一个类里加载配置文件 创建spring容器对象,容器创建对象创建。
ApplicationContext context = new ClassPathXmlApplicationContext(application.xml);

1》当spring程序执行时,首先会根据配置文件的内容进行解析。
		2》当程序解析到bean标签时,则会根据反射的机制实例化对象。
		3》将实例化好的对象保存到超大的Map集合中,bean中的id当Map中的Key,实例化好
		的对象当map中的value。如Map<id,对象>。
		4》从容器中获取对象。则从Map集合中通过id获取对象即可。

3.4 DI 依赖注入

作用:对象中的属性应该由spring容器动态赋值(首选set注入)
两种注入:get/set注入 构造方法注入
set注入:在application.xml文件的bean标签里,添加property标签。
一个property标签只能给一个属性赋值。
构造方法注入:在bean标签里,添加constructor-arg标签。
赋值方式和set注入一样。

4.工厂模式

4.1 问题

问题:通过spring容器创建的对象一般是通过反射机制调用的,但是有时候由于业务需要实例化抽象类的对象/复杂的接口对象
说明:spring提供了工厂模式用于实例化复杂对象!!!

4.2 静态工厂模式
4.3 实例化工厂模式
4.4 spring工厂模式

5.Spring注解模式

5.1 自动装配

说明:spring基于配置文件,为了让属性(对象的引用)注入更加的简单,则推出了自动装配模式
1、根据名称自动装配 autowire=“byname”

1.找到对象所有的set方法 setUserDao()
		2.setUserDao--set去掉--UserDao--首字母小写--userDao属性
		3.spring会根据对象的属性查询自己维护的map集合,根据userDao名称,查找map中
		key与之对应,如果匹配成功,则能自动调用set方法实现注入(必需有set方法)

2、根据类型自动装配

1.找到对象所有的set方法 setUserDao()
		2.根据set方法找到方法中参数的类型UserDao.class
		3.Spring根据自己维护对象的Class进行匹配,如果匹配成功则实现注入。

5.2 注解模式

关于注解的说明:spring为了简化xml配置文件,则研发了注解模式
spring为了程序更加严谨,通过不同的注解标识不同的层级 但是注解的功能是一样的
在配置文件中开启包扫描,即可把被注解标识的类交给spring容器进行管理
包扫描: <context:component-scan base-package=“com.jt”/>

5.3 一些spring常见注解

1).@Controller 用来标识Controller层的代码 相当于将对象交给Spring管理
2).@Service 用来标识Service层代码
3).@Repository 用来标识持久层–dao/mapper
4).@Component 万用注解–pojo
5).@Autowired: 可以根据类型/属性名称进行注入 首先按照类型进行注入如果类型注入失败,则根据属性名称注入
6).@Qualifier: 如果需要按照名称进行注入,则需要额外添加@Qualifier
7).@Resource(type = “xxx.class”,name=“属性名称”)
关于注解补充: 由于@Resource注解 是由java原生提供的,不是Spring官方的.所以不建议使用
上述的属性的注入在调用时 自动的封装了Set方法,所以Set方法可以省略不写
8)@Target({ElementType.TYPE}) 标识注解对谁有效 type:类 method:方法有效
9)@Retention(RetentionPolicy.RUNTIME) 运行期有效(大)
10)@Documented 该注解注释编译到API文档中.