[JAVA框架]Spring知识总结

全面解析Spring框架的核心概念,包括Bean管理、AOP、注解、JDBC抽象框架、MyBatis整合等内容,深入理解Spring如何简化企业级应用开发。

第一章Spring 入门

1)Bean : 标准的JavaBean

  • 属性用private修饰
  • 有getter/setter方法
  • 有无参数的构造方法
  • 实现serializable序列化接口

2) Spring常见名词

  • 轻量级        系统开销较小,非侵入式
  • IOC      控制反转,IOC使对象被动接受依赖类,而非主动获取。所有的类的创建、销毁都由Spring来控制,控制对象生存周期的不再是引用它的对象,而是Spring。对于某个具体的对象而言,使用Spring之前是它控制其他对象,现在是所有对象都被Spring控制,所以叫控制反转。
  • DI         依赖注入,在系统运行中,动态的向某个对象提供给它所需要的其他对象。
  • AOP             面向切面编程(面向方面编程),关注系统的横向切面。比如日志或事务支持。
  • 容器            Spring是一个包含且管理系统对象生命周期和配置的容器。Spring容器的作用是管理对象。
  • Spring框架 Spring框架为分层结构,各模块构建在核心容器之上,核心容器定义了创建、配置及管理Bean的方式。

3) Spring的七个模块

  • Spring Core 核心容器,提供Spring框架的基本功能,主要组件为BeanFactory,是工厂模式的实现。
  • Spring MVC 全功能的构建Web应用程序的MVC实现
  • Spring Web 简化了请求的处理过程以及将请求参数绑定至域对象的工作
  • Spring ORM        提供ORM的对象关系工具
  • Spring DAO 简化了错误处理过程并极大的减少了需要编写的异常代码
  • Spring AOP 通过配置管理特性,Spring AOP模块将面向切面编程功能集成至框架中,使Spring框架管理的任何对象均支持AOP
  • Spring Context            核心模块的BeanFactory使Spring成为容器,上下文(Context)模块使其成为框架。

4)Spring工作原理

       Spring 是一种通过JavaBean配置应用程序的方法。不需要通过new关键字创建对象,而是在配置文件中配置JavaBean。

Spring 是用于简化企业应用程序开发过程的开源框架

Spring 的核心是一个控制反转容器

Spring 提供了AOP实现

Spring 提供了常用WEB框架整合的支持

Spring 提供了对ORM技术整合的支持

5)Spring Bean封装机制

  • Spring Bean

SpringBean的方式管理所有的组件,J2EE 的全部组件都使用Bean管理。在Spring中,除了标准的JavaBean,其他任何对象和组件都可以作为Bean。 

Spring负责创建Bean的实例并管理其生命周期,Bean运行于 Spring的容器。Spring上下文是生产Bean的工厂,Bean是Spring工厂生产的实例。Spring产生工厂时,需要确定每个Bean的 实现类;Bean实例的使用者面向接口,因此无须关心Bean实例的实现类。Spring工厂负责维护Bean实例的实例化,使用者则无须关心。

SpringschemaLocation详细规定了Spring配置文件的合法元素、各元素出现的先后顺序、各元素的合法子元素以及合法属性等

  • Application Context

Spring包括两种不同的容器:BeanFactory ApplicationContext。BeanFactory提供基本的IOC支持;ApplicationContext则基于BeanFactory,提供应用程序框架服务。

        ApplicationContext通常使用ClassPathXmlApplicationContext实现类,该类以classpath路径下的XML配置文件创建ApplicationContext。

使用ClassPathXmlApplicationContext创建Spring容器:

从Spring容器中获取一个bean对象:

6) Spring DI/IOC

Spring将会管理几乎所有的Bean对象,而对象与对象之间可能存在依赖关系,在程序运行过程中,Spring把我们所需要的对象都拼装好,这就是Spring的依赖注入。

依赖注入通常分为设值注入、构造注入、自动注入

  • 设值注入

通过setter方法传入被调用者的实例,所以Bean的属性要求有对应的setter和getter方法

配置文件Beanclass元素不能为接口,只能为实现类

 

  • 构造注入

通过构造方法完成依赖关系的注入,并非 setter方法

在Computer里面添加带参构造方法:

修改spring配置文件:

index:构造方法参数的索引(从0开始)

  • 自动注入

Spring容器可以自动注入(autowire)相互协作bean之间的关联关系

autowire的方便之处在减少或者消除属性或构造器参数的设置

 

Autowire的属性

7)课堂案例

要求:计算机由主机和显示器组成,我们需要输出一台计算机的信息,比如该计算机由什么型号的主机、什么型号的显示器组成

 

实现步骤:

        1.创建项目:computer

       2.添加jar包,编写Spring支持

3.编写主机类:MainFrame

4.编写显示器接口:Display

5.创建显示器接口的实现类:SamsungDisplay和LgDisplay

6.创建计算机类:Computer

7.编写Spring配置文件

        name:要配置的属性的属性名

        ref:要配置的bean的id

8.编写测试类

9.运行效果

      

 

第二章 Spring AOP编程

1) 依赖注入(DI)→编写程序时不用关心其依赖的组件

面向切面编程(AOP)→将程序中涉及的公共问题集中解决

2) 面向切面的最终目的是为了“解耦合”,要把Java中重复的公共代码从耦合的Java类中剥离出来。

3) 无侵入:不修改原先代码,只进行扩展。

4)这种在运行时动态地将代码加入到类的指定方法指定位置上的编程思想就是面向切面编程。

5)  AOP是对OOP的补充和完善。

6) AOP的思想就是把这些公共部分从业务方法中提取出来,集中处理

    散布在各处且无关的代码称为横切(Cross-cutting)代码。

7) AOP技术代表横向关系,通过利用“横切”技术解剖封装的对象并获得其内部,将影响多个类的公共行为封装至可重用模块并命名为“Aspect”(切面)。

8) AOP技术将与业务无关却由业务模块共同调用的逻辑进行封装,减少系统的重复代码,降低模块间的耦合度,提高系统的可操作性及可维护性

9)AOP将软件系统分为两个部分:核心关注点与横切关注点。

10)业务处理的主要流程即核心关注点,与之关系较小的部分就是横切关注点。

11)AOP 的作用在于分离系统中的各种关注点,将核心关注点与横切关注点进行分离,其核心思想是将应用程序中的商业逻辑与向其提供支持的通用服务进行分离。

12)AOP 中包含许多新的概念与术语
    ①切面 (Aspect):切面是系统中抽象出来的的某一个功能模块。
    ②连接点 (Joinpoint):程序执行过程中某个特定的点,如调用某方法或者处理异常时。      在SpringAOP中,连接点总是代表某个方法的执行。
    ③通知 (Advice):通知是切面的具体实现,是放置“切面代码”的类。
    ④切入点 (Pointcut):多个连接点组成一个切入点,可以使用切入点表达式来表示。
    ⑤目标对象 (Target Object):包含一个连接点的对象,即被拦截的对象。
    ⑥AOP代理 (AOP Proxy):AOP框架产生的对象,是通知和目标对象的结合体。
    ⑦织入 (Weaving):将切入点和通知结合的过程称为织入。

13)Spring AOP概念案例

目标对象(Target Object):包含业务关注点(本例是需要日志管理的点)的对象

连接点(JoinPoint):程序执行过程中的某个业务关注点被称作连接点(JoinPoint)。

连接点对象可以在切面类的通知方法中以参数的形式使用,其包含了以下方法来访问连接点的一些信息:

Object[] getArgs():以对象数组的形式返回所有方法参数

Signature getSignature():返回方法签名,通过Signature的getName()方法可以得到方法名称;getModifiers()方法可以得到方法修饰符。

String getKind():返回当前连接点的类型

Object getTarget():返回连接点所在的目标对象。

Object getThis():返回AOP自动创建的代理对象。

切入点(PointCut):多个连接点组成一个切入点。切入点表达式来描述多个连接点的集合,我们称之为AspectJ表达式。常用的是AspectJ的Execution表达式,execution()是最常用的切点函数

定义切入点表达式  execution (* com.sample.service.impl..*.*(..))

整个表达式可以分为五个部分: 

execution(): 表达式主体。 

第一个*号:表示返回类型,*号表示所有的类型。

包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包

第二个*号:表示类名,*号表示所有的类。

*(..):  *号表示方法名,表示所有的方法,括号里面表示方法的参数,句点表示任何参数。

切面(Aspect)

切面是系统中抽象出来的的某一个系统服务功能模块

通知(Advice

是在切面的某个特定的连接点上执行的具体操作。

前置通知(Before): 在某连接点之前执行的通知,它可以阻止连接点的执行

后置通知(AfterReturning:在某连接点正常完成后执行的通知,在目标方法调用之后织入通知,即在方法正常退出返回值之后且返回调用地点之前进行织入

,它可以访问方法返回值。

异常通知(AfterThrowing:在方法抛出异常退出时执行的通知。它可以访问抛出的异常。

最终通知(After ):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。它不能访问返回值或抛出的异常。可以用来执行释放资源,日志记录等操作。

环绕通知(Around:也叫方法拦截器。包围一个连接点的通知。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。 可用于实现性能测试,事物管理等。

14)Spring AOP代理

  • 如果被代理的目标对象实现了至少一个接口,Spring会使用针对接口产生代理的Java SE动态代理(Java直接提供的动态代理API)
  • 对于需要直接代理类而不是代理接口的时候,Spring也可以使用CGLIB(Code Generation Library)代理。如果一个业务对象并没有实现任何接口,Spring就会使用CGLIB在运行时动态生成目标对象的子类对象来作为代理对象。就算目标对象实现了接口,你也可以强制使用CGLIB代理

15)AOP配置注意事项:

1.AOP相关内容必须配置在<aop:config>标签内部。

2.<aop:pointcut>标签表示切入点,<aop:aspect>标签表示切面。

3.<aop:config>标签内可以配置多个切入点、切面。

4.切入点也可以配置在切面内部,称为该切面的私有切入点。

16)重构手机业务案例

①创建项目:phone

②添加Spring支持,引入AOP命名空间,打开配置文件”applicationContext.xml”

引入AOP命名空间是为了能够在配置文件中使用AOP相关的xml标签,如果引入后不能使用AOP标签,则很有可能命名空间配置错误。

  • 创建业务处理接口:PhoneBiz,及其实现类PhoneBizImpl

       

④创建日志管理类:LogAspect

⑤将日志管理类配置成一个Spring Bean

  • 在Spring配置文件中将日志管理类配置成一个切面

⑦配置通知。将LogAspect类中的的before方法定义成一个前置通知,和切入点p1关联起来,这样before方法就能够在目标方法执行之前先执行日志记录了

⑧编写测试类

⑨输出结果

 

 

 

 

 

第三章  Spring注解

1)注解方便了代码的书写,减少了程序员的配置复杂程度

2)使用@Component注解配置bean

唯一的可选参数是value,用于指定bean的名称(id值,必须是唯一的)

3)bean名称默认为类名首字母小写(约定:一般不起别名)

  1. 用于定义bean的注解形式
      • @Repository      数据访问层bean(持久化)

②@Service               业务层bean

③@Controller           视图层bean

5)Spring 容器必须启用类扫描机制,找到所有使用注解配置的bean(引用context命名空间扫描配置的bean)

6)通过Spring 容器的工厂方法获取并使用bean

7)当属性为普通属性时,使用@value注解

        @value(value=”DELL主机”)

        相当于

        <property name=”modeType” value=”DELL主机”/>

8)当属性为对象属性时

①使用@Autowired注解,默认按类型自动注入;

使用@Resource按默认名称自动注入(name可省)@Resource(name=“lg”)

@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型

@Autowired+@Qualifier使用按名称自动注入

    @Autowired

    @Qualifier(value=”lg”)

9)使用@Scope注解配置bean的作用域(默认singleton单例)

singleton表示在每个Spring IoC容器中一个bean定义对应一个对象实例,即Spring使用单例模式获取实例。

prototype表示一个bean定义对应多个对象实例,即非单例模式,我们常称作多例。

10)启用AOP注解配置

用<aop:aspectj-autoproxy />标签来告诉spring应用容器

11)用注解配置不同类型的通知

        @AfterThrowing         异常通知

除了需要指定切入点外还需要根据方法参数名称绑定异常对象

pointcut配置项用于指定切入点

Throwing配置项用于指定方法中表示异常对象的参数名称,这样可以将目标方法抛出的异常对象绑定到同类型叫e的方法参数

        @Before                前置通知

        @AfterReturning                后置通知

        @After          最终通知

        @Around              环绕通知

12)Json的主要作用是序列化和反序列化

   反序列化→JSON字符串转成对象

        Transient               防止反序列化

运行效果:

日期输出指定格式

效果如图:

第四章  SpringJDBC抽象框架

  1. Spring JDBC抽象框架应用开发人员只需要完成

①声明SQL语句

②处理每一次遍历操作

2)Spring数据源

       

3)基于JDBC驱动程序定义的数据源每次都会创建一个新的连接,此种数据源仅适合规模很小程序的程序或开发阶段

4)数据库连接池

①数据库连接池负责创建、管理和释放数据库连接。

      • 数据库连接池对象都是以唯一实例(单例)形式存在的。
      • 配置数据库连接池的属性:

  1. 使用DBCP数据源Spring配置

  1. 使用JNDI数据源

Spring Web应用通常运行于一个J2EE程序服务器里,比如WebSphere、JBoss或像 Tomcat这样的Web容器。这些服务程序可以配置数据源,然后通过JNDI(java 名字目录服务)暴露给应用程序,应用程序通过本地或远程加载数据源获得数据库连接

好处可以在应用程序之外对数据源进行独立管理,应用程序本身只需要在需要访问数据库时请求数据源即可。而且,程序服务器里管理的数据源通常具有更好的性能,并能够由应用服务器系统管理员进行热切换(修改数据源配置,无需重启服务器)

Spring配置文件:

  1. 使用Spring JDBC模版

      • 使用JdbcTemplate

使用JDBC模版实现学生信息表的数据操作

实现步骤:

a)创建项目:springjdbc,添加jar包

b)在Spring配置文件中配置注解和DBCP数据源

c)创建学生实体类:Student

    d)创建dao接口:StudentDao,添加学生信息的增删改查方法。

   

e)创建接口的实现类:StudentDaoImpl,并在类中添加JdbcTemplate类型的属性

f)实现dao接口中定义的方法

两种皆可,但是第一个有限制:实体类属性和数据库的类名要保存一致

JdbcTemplate的query()方法实现查询,有两个参数:第一个参数是一个字符串,包含要执行的sql语句;第二个参数是RowMapper对象,它从ResultSet里提取数值并构造一个实体对象返回。

JdbcTemplate的update()方法,两个参数分别为要执行的sql语句和sql中内置的参数。

g)创建测试类

h)运行结果

使用NamedParameterJdbcTemplate

第五章  Spring整合MyBatis

一、整合步骤

1)单纯的导入Spring框架

  a)导入Spring相关的所有jar包

  b)创建applicationContext.xml配置文件

2)单纯的导入MyBatis框架

  a)导入MyBatis相关的jar包

  b)创建MyBatis-config.xml(配置文件)

  c)创建实体类

  d)创建dao(mapper)接口

  e)创建dao(mapper)接口对应的.xml映射文件

3)将MyBatis整合到Spring中

  a)导入mybatis-spring.jar包

  b)配置数据源

  c)在Spring配置文件中创建Bean,配置SqlSessionFactory会话工厂,加载mybatis的配置文件

  d)在Spring配置文件中创建Bean,扫描mybatis的所有接口,产生对应的实例,并自动放入Spring容器

  e)添加事务

二、课堂案例

    1)建表及添加测试数据

    2)创建项目:springmybatis

3)在项目中添加jar包

MyBatis    2个jar包     mysql  1个jar包

Spring     13个jar包    集成   1个jar包

   

4)创建Spring配置文件,并添加context、tx、aop、mybatis命名空间

5)在src目录下创建日志配置文件:log4j.properties

6)创建MyBatis配置文件:mybatis-config.xml

7)创建实体类:UserInfo

8)创建dao包,并在包内创建接口:UserInfoMapper

   

9)在dao包中创建映射文件:UserInfoMapper.xml

10)创建service包,并在包内创建业务层接口:UserInfoService

11)创建业务层接口的实现类:UserInfoServiceImpl

12)配置DBCP数据源,并添加bean注解扫描

13)配置SqlSessionFactory,将SqlSessionFactory对象交给spring处理

14)配置MapperScannerConfigurer

    扫描MyBatis的所有接口,生成相应的实例对象,并自动加载到Spring容器中

15)配置事务管理器

16)配置声明式事务

17)配置声明式事务管理

三、命名空间的作用

    context     启用注解

    tx      启用事务

    aop     启用aop

    mybatis     启用mybatis

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值