Spring框架_知识整理

一、Spring框架入门

1、Spring Core:

​        是框架最基础的部分,提供了IOC和依赖注入的特性。这里提供了一个基础的概念叫:BeanFactory,允许从你的程序逻辑中分离依赖关系和配置

2、Spring Context

​        构建Core封装包基础上的Context包,提供了一种框架式的对象访问的方法。Context封装包的特性来自于Beans封装包,并且添加了对国际化的支持,还包含了事件的传播,资源的封装的方式和Context的透明创建。

3、Spring DAO

​        DAO(Data Accsee Object)提供了jdbc的抽象层,可以消除冗长的jdbc代码和解析数据库厂商特有的错误代码。并且,jdbc封装包还提供了一种比编程性更高的声明事务管理的方法,不仅仅是实现了特定的接口,对所有的pojo(dto)都适用的方法。

4、Spring ORM

​        orm封装包提供了常用的"对象/关系"映射的集成层。其中包含JPA、JDO、Hibernate和Mybatis。利用ORM的封装包可以混合使用所有的Spring提供的对于"对象和关系"的映射。

5、Spring AOP:

​        Spring的AOP封装包的作用是规范程序面向编程的实现,可以定义一些功能,比如方法的拦截器,从逻辑上讲,减弱了代码之间的耦合性,类与类功能与功能之间的关系被清晰的分离开,可以轻松的将各种行为信息给合并到代码中

6、Spring web

​        Spring中web包提供了基础的针对web开发的集成特性,比如多方的文件上传,利用Servlet listeners进行IOC容器的初始化。可以将spring和其他的框架进行融合

7、Spring web mvc

​        提供的是一个web应用的mvc(Model - Vice - Controller)的实现。spring的mvc框架并不是仅仅提供了传统的实现,它还提供了一种清晰的分离模式,在领域模型代码和web Form之间。并且,可以借助Spring框架的其他特性来完成功能。

二、Spring-IOC

        IOC(Inverse Of Control),控制反转,也被称为DI(依赖注入);将原本由开发者自己创建的对象,交给Spring容器来进行创建,原本需要注入的属性值交给容器来进行注入,使得开发人员整能够将更多的精力转移到业务领域去。并且Spring推荐使用面向接口编程的方式,结合IOC将各个层次之间实现高度的解耦,让程序的可扩展性和可维护性更高。

 三、Spring基于注解的配置

       @Component("name")
name:将这个类设置成为受管组件,名称是什么
可以通过这个name值来对这个受管组件进行调用,这里的配置就相当于之前在xml文件中基于元素配置中的代码
     <bean id="empDAO" class="com.softeem.dao.impl.EmpDao"/>
        @Qualifier("name")
name:相当于一个连接的名称,在进行装配的时候,我们可以将我们要连接的bean的名称(id)直接连接在@Qualifier,让两个类之间产生关系,通过指定哪个是真正要被装配的bean来消除混乱。
        @Autowired
在使用spring进行开发的时候,有两种购房时一种是xml文件,另外一种是使用java config。
这个注解我们以后会进场使用,首先我们从所属的范围来看,这个注解是属于Spring的容器配置的一个注解,与这个注解同属于容器注解的还有:@Qualifier("name") @Primary等。其次我们可以从字面的意思来看,这个注解的意思是进行自动装配。
什么是自动装配?使用将spring容器中的bean自动的和我们所需要的bean的类组装在一起

 四、Spring管理数据源

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=123456
maxActive=10
minIdel=2
maxWait=10000
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--读取属性占位符的配置信息-->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
    <!--导入配置文件-->
    <value>classpath:jdbc.properties</value>
    </property>
</bean>
<!--配置数据库连接池的数据源-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driverClass}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <property name="maxActive" value="${maxActive}"></property>
        <property name="minIdle" value="${minIdel}"></property>
        <property name="maxWait" value="${maxWait}"></property>
</bean>
</beans>

五、SpringIOC的配置详解

1、name和id之间的区别

        在Spring的核心配置中除了可以为bean执行id作为标识以外,还可以使用name作为标识符,区别在于 id只能指定唯一标识,name可以为bean指定多个别名(使用","好隔开) 注意:在低版本的spring中(3.0以下),id不运行使用特殊符号进行命名,name允许使用特殊符号

2、自动装配

        在开发过程中由于spring容器中会需要配置多个bean的情况,而bean之间相互存在依赖的关系,所以 需要在存在依赖管理的bean中配置property来体现他们之间的关系,但是会有很多的重复的代码出现, 因此在SpringIOC容器提供了自动装配,允许我们通过在bean中使用autowire属性来设置装配的模式,内 置的装配模式包含一下几种:
     (1)byName:根据bean中属性的名称去容器中寻找id匹配的bean对象
     (2)byType:根据bean中属性对应的数据类型去容器中寻找何时的bean对象(允许出现多个同类型的 bean)
     (3)Constructor:基于构造器的参数进行注入
     (4)default:默认的注入方式(byName)
     (5)no:不设置注入

3、bean的作用域

默认情况下SpringIOC对于bean的管理采用的是单例模式,即每次获取bean对象时都是同一个实例, 我们可以通过为bean配置scope属性设置作用的范围,scope属性取值包含一下几种:
    (1)singleton:使用单利模式对bean进行管理(默认配置)
    (2)prototype:每次获取的bean都是不同的实例对象
    (3)request:基于web项目使用的,针对一个request使用一个bean
    (4)session:基于web项目,针对一次会话创建一个bean
    (5)global session:基于web项目,针对一次http session生效,用于Portlet上下文中
    (6)application:基于web项目,作用于为整个ServletContext创建的一个bean
    (7)web socket:基于web项目,作用于跟是web socket保持一直 基于之间的配置中才用的是@Scope()来实现的

4、生命周期

        受spring容器管理bean对象都有自己完整的生命周期,当springIOC容器被初始化的时候,会对所有的受 管组件进行初始化,同时初始化完成之后会执行每个实例中配置的init-method完成初始化的过程,当Bean 对象被销毁前会执行destroy-method实现销毁前的清理工作

public class EmpService_02 implements IEmpService {

private IEmpDao empDao;

    @PostConstruct
    public void init(){
        System.out.println("创建连接....");
}

    public boolean addEmp(Emp emp){
        System.out.println("准备执行添加的操作...file");
        System.out.println("执行完毕,业务完成...file");
        return false;
    }

    @PreDestroy
    public void destroy(){
        System.out.println("销毁连接");
    }

}

对应的Bean的配置

bean id="empService2" class="com.softeem.service.impl.EmpService_02"
        init-method="init"
        destroy-method="destroy">
    <property name="empDAO2" ref="empDAO2"/>
</bean>

    init-method="init":配置是EmpService中对象创建之后需要执行的初始化的方法init()
    destroy-method="destroy":配置是当EmpService对象被销毁(bean容器关闭)之前执行的清理的方法 destroy()
    init-method:在注解中等同于:@PostConstruct
    destroy-method:在注解中等同于:@PreDestroy

5、延时初始化

        通常情况下,当SpringIOC容器一旦启动,则所有受管bean对象都会被初始化,此时会消耗大量的内存空间 以及时间方面的开销,可能有一些bean对象不需要立即就进行获取,而是在使用的时候才获取,此时可以 通过在受管的组件上设置lazy-init将对象的初始化时间推迟到使用是再进行完成,从而减少一些不必要的 空间和时间方面的开销

六、使用注解进行配置IOC

1、配置依赖

<!--添加spring的依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>

2、配置文件

    <!--添加基于注解的配置读取工具-->
    <context:annotation-config/>
    <!--设置你要扫描的是哪个包以及其子包,并且识别包中所有的受管理的组件-->
    <context:component-scan base-package="com.softeem"/>

3、给受管组件的包中的受管组件添加注解

​    (1)@Required:注释在类中的set方法上面的,一旦注解了之后,在配置文件中就必须将受管组件的这个set方法所对应的属性进行实现赋值

​    (2)默认情况下,spring提供了@Component用于对受管bean组件进行注解,但是这个配置方法还是过于笼统了,因此spring提供了一些更加精细化的注解,比如:
   @Repository:用于在DAO层进行注解
   @Service:用于在service层进行注解
   @Controller:用于在Controller层进行注解
   注意事项:以上的注解仅限于在类上进行使用

​    (3)@Autowired:等同于在bean中autowire属性,用于自动为元素装配关联的bean对象(默认是byType)

    (4)@Resource(name="StudentDAO")//相当于指定了要找到哪一个被加载出来的实例化对象,使用名字进行锁定

七、代理模式

        远程代理:为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。 
        虚拟代理:通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。 
        缓冲代理:为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。 
        保护代理:可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。 
智能引用:要为一个对象的访问(引用)提供一些额外的操作时可以使用

八、Spring的AOP

1、概念

        在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

2、专业术语解析

Aspect(切面):Aspect生命类似于在java中类的声明,在里面会包含一些切点相关的内容

Joint point(连接点):表示在程序中明确定义的点,典型的调用包括方法的调用,对类成员的访问以及异常处理程序模块得我执行等等信息,本身可以切入其他的切入点

Pointcut(切点):表示一组连接点,这些连接点或是通过逻辑关系组合起来的,或者是用过统配、正则表达式进行处理的,定义了响应的增强要发生的地方

Advice(增强):Advice定义在切点里面,定义的是程序点具体要做的事情是什么。它是通过before、after和around来区别每一个连接点之前和之后要替代执行的代码是什么.

​            切面的工作被称为增强或者通知。通知定义了切面是什么,以及什么时候使用

​            通知有5种:

​               前置通知(Before):在目标方法被调用之前就调用的功能

​               后置通知(After):在目标方法完成之后调用通知,此时不会关心方法输出的是什么

​               返回通知(After-returning):在目标方法成功执行之后调用的通知

​               异常通知(After-throwing):在目标方法抛出异常后调用的通知

​               环绕通知(Around):通知包裹了被执行的方法,在被通知方法调用之前或者之后定义的行为

Target(目标对象):放在增强中的目标对象

Weaving(织入):将切面和其他的对象连接诶起来,并且创建对象的过程。

3、Spring中基于xml的AOP配置的步骤

1、把通知bean交给spring管理
2、使用aop:config标签表明开始aop的设置
3、使用aop:aspect标签表明配置一个切面
                   id属性:给切面提供一个唯一的标识
                    ref属性:指定通知的类的id是什么
4、在aop:aspect标签的内部使用对应标签来配置通知的类型,我们现在使用pringLog方法在切入点执行之前先执行,所以我们要配置一个前置的通知
    aop:before配置前置通知
        method="printLog":用于指定Logger类中哪个方法是提前执行的方法
        pointcut属性:用于执行切入点的表达式,这个表达式的含义是值对业务层的哪些方法进行增强
    切入点的表达式的写法:
    关键字:execution(表达式)
    表达式: 访问控制修饰符 返回值 包名.包名.包名...类名.方法名(参数列表)
    包名也可以使用同配置进行表示,但是有几级包就要写几个*.:
    * *.*.*...UserServiceImpl.save()
    类名和方法名也可以使用通配符表示
    * *.*.*...*.*()
    参数列表:
    可以直接写数据类型:
    基本数据类型的名称 int
    引用数据类型:java.lang.String
    可以用通配符表示任何的数据类型,但是前提是不许有参数
    可以使用..表示无参数,有参数可以是任何的类型

九、Spring和Mybatis的整合

​    (1)Spring矿建中有一个SqlSessionFactoryBean帮助我们创建SqlSessionFactory 

​                SqlSessionFactoryBean主要通过对Spring-config.xml解析完成是Configuration的实例化以及映射文件 mapper*.xml的解析。

​            因为这个方法内有两个关键类:

​            XMLConfigBuilder:在mybatis中主要你负责对mybatis-coinfig.xml文件进行解析

​            XMLMapperBuilder:负责解析映射的配置文件

​    (2)对事务的管理

​    (3)不需要mybatis的配置映射文件

十、 SpringMVC

1、什么是SpringMVC?

​        SpringMVC是一个Spring内置的MVC的框架。

​         MVC框架,它解决了WEB开发过程中常见的问题(参数的接收,文件上传,表单验证,国际化处理),而且使用简单,并且能够跟Spring框架无缝集成。采用了松散耦合可以插拔组件的结构,比其他的(原始的)mvc框架更加的具有扩展性和灵活性。

2、SpringMVC的作用

​        MVC是一种模式(Model - View - Controller):解决页面的代码和后端代码之间的分离

​        Model模型:javabean

​        View视图:jsp/img

​        Controller控制器:Action/servlet

​        控制器存在的目的就是为了保证模型和视图之间的一致性,当模型发生改变的时候,控制器可以把模型中的新的内容更新到视图中去。

3、SpringMVC的执行流程

    01、用户发送出请求被前端的控制器拦截进行处理
    02、前端控制器收到请求调用处理器的映射器
    03、处理器映射器找到具体的处理器(查找xml配置或者注解配置),生成处理器对象以及处理器的拦截器
    04、前端控制器调用处理器的适配器
    05、处理器的适配器经过适配调用具体的处理器(Controller)
    06、处理器执行完成之后返回javabean对象已经要处理的试图对象
    07、处理器的适配器将处理器处理的结果返回到前端控制器去
    08、前端控制器将信息传给视图解析器去调用具体要执行的哪个视图,使用视图解析器进行解析
    09、视图解析器将具体要处理的视图返回给前端控制器
    10、前端控制器根据传过来的视图进行渲染(将模型数据添加到视图中)
    11、视图信息返回给用户

4、涉及到的组件

1、前端控制器(不需要程序员进行开发)由框架提供,在web.xml中进行配置
    作用:接收请求,响应结果,相当一个转发器,中央处理器
2、处理器的映射器(不需要程序员开发)由框架提供
    作用:根据请求的url找到处理器(controller),可以通过xml和直接方式进行映射处理
3、处理器的适配置(不需要程序员开发)有框架提供
    作用:是一个特定的规则是去处理器中找处理器的方法
4、处理器(也称为Controller,需要程序员开发)
    注意:编写处理器的时候要按照处理器的适配器的要求去做,否则适配器就找不到具体要处理哪个事情
    作用:接收用户请求的信息,调用业务方法处理请求
5、视图解析器(不需要程序员开发)框架提供
    作用:进行视图的解析,将逻辑视图转换成真正的物理视图
    SpringMVC框架中执行的视图技术:jstlView,freemakerView等
6、视图View(需要程序员开发)
    作用:把数据展现给用具的界面
    View是一个接口,实现类支持不用的View技术(jsp,pdf,jpg,jsp等)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值