Spring复习整理

Spring介绍

Spring是一站式的轻量级Java开源框架,Spring框架性质是属于容器性质的,容器中装什么对象就有什么功能,提供了JavaEE各层的解决方案。实现了工厂模式的工厂类(ApplicationContext)。

表现层:Spring MVC
持久层:JdbcTemplate、ORM框架整合
业务层:IOC、AOP、事务控制

一站式:不仅不排斥其他框架,还能帮其他框架管理对象

Spring优点

  1. 非侵入式设计:是应用程序代码对框架的依赖最小化Spring框架的API不会在业务逻辑上出现,是纯净的,便于移植
  2. 方便解耦,简化开发:Spring就是一个大工厂,将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大降低了组件之间的耦合性

耦合性:是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系

  1. 支持AOP(面向切面编程思想):Spring允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性

  2. 支持申明式的事务处理(AOP事务):只需要通过配置就可以完成对事务的管理

  3. 方便集成优秀框架:如Struts2,Hibernate,MyBatis等的直接支持

  4. Junit测试的支持:可以通过注解方便的测试Spring

  5. 封装JavaEE的API:降低使用如JDBC,JavaMail的使用难度

Spring概念

IOC思想

控制反转:将我们创建对象的方式反转了,将对象的创建权交给Spring,对象的创建以及依赖关系的注入和维护都可以由Spring完成。
反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它。所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。这种现象就称作控制反转,即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。虽然平时只需要按要求将bean配置到配置文件中,但是了解其实现过程对理解spring的实现原理是有好处的

DI

依赖注入:传统模式通过new的代码方式创建对象,调用者和别调用者耦合性增强,不利于项目后期的维护。通过控制反转由Spring创建对象的实例,从Spring容器角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这就是依赖注入

依赖注入两种方法实现:属性setter方法注入,构造方法注入(基于构造方法的依赖注入通过调用含参的构造方法来实现)

Spring AOP

面向切面编程,是OOP(面向对象编程)的一种补充

AOP采取纵向重复,横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或执行时,再将这些提取出来的代码应用到需要执行的地方。

思想应用

页面提交请求servlet接受参数,解决参数乱码问题,将解决乱码的代码抽取放到Filter中
在这里插入图片描述

拦截器
Interceptors能覆盖到所有的Action,抽取出接受参数的功能放到拦截器

在这里插入图片描述

事务管理中,事务的开启和提交放入代理类InvocationHandler,使用代理技术动态加载到所有的service层(被代理对象)中,形成代理对象
Proxy.newProxyInstance(
classLoader,Interface[] arr , InvocationHandler
);

Spring底层实现:

代理机制:

  • Spring的AOP的底层用到两种代理机制:
  • JDK的动态代理 :针对实现了接口的类产生代理.
    被代理对象必须要实现接口,才能产生代理对象.如果没有接口将不能使用动态代理技术
  • CGLIB的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术 生成当前类的子类对象.

动态代理

代理类实现InvocationHandler接口,并实现了接口中的invoke()方法,在其中创建一个代理方法,参数为被代理对象
方法返回为生成的代理后的对象 Proxy.newProxyInstance(
classLoader,Interface[] arr , InvocationHandler
);
代理对象类拥有被代理对象类的所有方法,调用方法时调用代理类中的invoke方法去处理,对被代理对象类的中方法进行增强

在这里插入图片描述

基于代理类的AOP

AOP名词

在这里插入图片描述

AspectJ开发

AspectJ是一个AOP框架,实现AOP有两种方式:
一个是基于XML的声明式AspectJ,另一种是基于注解的AspectJ

Spring的核心容器

BeanFactory(过时)

提供完整的IOC支持,简单来说就是一个管理Bean的工厂,主要覆辙初始化各种Bean

Bean:JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

ApplicationContext

ApplicationContext是BeanFactory的子接口,也称为应用上下文,包含BeanFactory的所有功能
加载applicationContext.xml核心文件实例化工作:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“applicationContext.xml”);
applicationContext.getBean("");

BeanFactory 和 ApplicationContext 的区别:

BeanFactory :是在getBean的时候才会生成类的实例.
ApplicationContext :在加载applicationContext.xml(容器启动)时候就会创建.

Bean

id 属性和 name 属性标签的配置

id :Bean的唯一标识符
name:指定名称

scope 属性:Bean 的作用范围.

  • singleton :默认值,单例的.

  • prototype :多例的.

  • request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

  • session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

  • globalSession :WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当
    于session.

Bean 的生命周期的配置:

通过配置< bean>标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method
作为Bean的销毁的时候执行的方法。 销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

Spring 生成 Bean 的时候三种方式(了解)

【无参数的构造方法的方式】
【静态工厂实例化的方式】
【实例工厂实例化的方式】

Spring 的 Bean 的属性注入(XML)

【构造方法的方式注入属性】
在这里插入图片描述

【set 方法的方式注入属性】
在这里插入图片描述

Spring 的 Bean 的属性注入(注解)

在这里插入图片描述

  • 作用在类上

    • @Component(value=“userDao”)
    • @Controller :WEB层
    • @Service :业务层
    • @Repository :持久层
  • 属性注入的注解:(使用注解注入的方式,可以不用提供 set 方法.)

    • @Value :用于注入普通类型.
    • @Autowired :自动装配:
      • 默认按类型进行装配.
      • 按名称注入:
    • @Qualifier:强制使用名称注入.
    • @Resource相当于:
    • @Autowired和@Qualifier一起使用.

Bean 的作用范围的注解:

@Scope:

  • singleton:单例
  • prototype:多例

Bean 的生命周期的配置:

@PostConstruct :相当于init-method
@PreDestroy :相当于destroy-method

Spring 的 Bean 管理的方式的比较

在这里插入图片描述

Spring 提供了很多持久层技术的模板类简化编程

在这里插入图片描述

Dao层框架将连接池的配置交给 Spring 管理:

Spring 进行事务管理一组 API

PlatformTransactionManager:平台事务管理器
在这里插入图片描述

基于XML方式或注解方式声明事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值