Spring框架

概念:

    一个开源框架

     简化企业级应用开发而生,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能

     是JavaSE/EE一站式框架

 

优点:

    方便解耦,简化开发

         Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

    AOP编程的支持

         Spring提供面向切面编程,可以方便实现对程序进行权限拦截,运行监控等功能

    声明式事务的支持

          只需要通过配置就可以完成对事务的管理,而无需手动编程

    方便程序测试

          Spring对Junit4支持

    方便集成各种优秀框架

           Spring不排斥各种优秀的开源框架

    降低了Java EEAPI的使用难度

            Spring对JavaEE开发中非常难用的一些API(JDBC,JavaMail,远程调用等),都提供了封装,使这些API应用难度大大降低

SpringIOC底层实现原理

    工厂模式+配置文件+反射

    ocp原则:open-close原则,对程序进行扩展open,对修改程序代码是close

添加Springjar包:

  

Spring的工厂类:

  

BeanFactory只有调用getBean时才实例化,ApplicationContext在加载配置文件时所有单例模式生成的类全部实例化

Spring的Bean管理(XML方式)

    使用类构造器实例化(默认无参数)

    使用静态工厂方法实例化(简单工厂模式)

    使用实例工厂方法实例化(工厂方法模式)

Spring的Bean管理(注解方式)

    @Component描述Spring框架中Bean

    @Repository用于对Dao层实现类进行标注

    @Service用于对Service实现类进行标注

    @Controller用于对Controller实现类进行标注

    使用@Autowired进行自动注入

    @Autowired默认按照类型注入,如果存在两个相同的Bean类型,按照名称注入

    @Autowired注入时可以针对成员变量或者set方法

   @Autowired的required属性,设置一定要找到匹配的Bean

   使用@Qulifier指定注入Bean的名称

    使用Qualifier指定Bean名称后,注解必须指定相同的名称

Spring其他注解

   Spring初始化Bean或者销毁Bean时,有时候需要做一些处理工作,因此Spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法

    初始化:@PostConstruct

    销毁:@PreDestory

XML与注解的整合开发

1.引入context命名空间

2.在配置文件中添加context:annnotation-config标签

Bean的常用配置

     id和name

        一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

        id属性在IOC容器中必须是惟一的,name没有唯一性约束,使用时要唯一

         如果Bean的名称有特殊字符,必须使用name

     class

         用于设置设置一个类的完全路径名称,主要作用是IOC容器生成类的实例

    scope

         

Spring容器作中Bean的生命周期

     Spring初始化Bean或销毁Bean时,有时需要做一些处理工作

     init-method:当Bean被载入到容器的时候调用init

     destory-method:当Bean从容器中的删除的时候调用destory(scope=singleton有效)

Spring属性注入

   1.构造函数注入

   2.属性setter方法注入

   3.接口注入

   Spring支持前两种

 

SpringAOP:

     采用横线抽取机制,取代了传统纵向继承体系重复性代码(性能监视,事务管理,安全检查,缓存)

     连接点:被拦截的点,在Spring中,这些点指的是方法,因为spring只支持方法类型的连接点

     切入点:对那些连接点进行拦截的定义

    通知/增强:拦截到joinpoint之后所要做的事情就是通知

    引介:一种特殊的通知在不修改类代码的前提下,可以在运行期为类动态的添加一些方法或者Field.

   目标对象:代理的目标对象

   织入:把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入

    代理:一个类被AOP织入增强后,就产生一个结果代理类

    Aspect(切面):切入点和通知(引介)的结合

 

JDK动态代理 :

CGLB动态代理:

    对于不使用接口业务类,无法使用JDK动态代理

   CGLB采用非常底层的字节码技术,可以为一个类创建子类,解决无接口代理问题

代理知识总结:

    1. Spring在运行期,生成动态代理对象,不需要特殊的编译器

    2.Spring AOP的底层就是通过JDK动态代理或者CGLIB动态代理技术,为目标Bean执行横向织入

      若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理

      若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类

   3.程序中优先对接口创建代理,便可程序解耦维护

   4.标记为final的方法,不能被代理,因为无法进行覆盖

     JDK动态代理,是针对接口生成的子类,接口中的方法不能使用final修饰

     CGLib是针对目标类生成子类,因此类或者方法不能使用final的

   5.Spring只支持方法连接点,不提供属性连接点。可以指定拦截目标类的那些方法

 

Spring AOP切面类型:

    Advisor:代表一般切面,Advice本身就是一个切面,对目标类所有方法进行拦截

    PointCutAdvisor:代表具有切点的切面,

    IntroductionAdvisor:代表引介切面,针对引介通知而使用的切面(不要求掌握)

 

Spring切面配置参数:

     proxyTargetClass:是否对类代理而不是接口,设置为true时,使用CGLB代理

     interceptorNames:需要织入目标的Advice

     singleton:返回代理是否是单实例,默认单例

     optimize:当设置为true时,强制使用CGlib

常用PointcutAdvisor实现类

     DefaultPointcutAdvisor最常用的切面类型,它可以通过任意PointCut和Advice组合定义切面

     jdkRegexpMethodPointCut构造正则表达式切点

自动创建代理

   BeanNameAutoProxyCreator 根据Bean名称创建代理

   DefaultAdvisorAutoProxyCreator 根据Advisor本身包含的信息创建代理

   AnnotationAwareAspectJAutoProxyCreateor 基于Bean中的AspectJ注解进行自动代理

RestFul

  核心内容:   

    1.资源与URL

    2.资源的表述

    3.状态的转移

  特点:

    1.统一了客户端访问资源的接口

    2.url更加简洁,易于理解,便于扩展

    3.有利于不同系统资源共享

  四种形式:

    1.GET获取资源

    2.POST新建资源

    3.PUT修改资源

    4.DELETE删除资源

事务

     概念:一个程序执行单元执行的一列操作,要么完全执行,要么完全不执行

     特性:1.原子性:一个事务是一个不可分割单位

                2.一致性:事务必须是使数据库从一个一致性到另一个一致性状态

                3.隔离性:一个事务的执行不能被其他事务干扰

                4.持久性:事务一旦提交,改变就是永久性的

Mysql事务处理

    Mysql中只有使用了Innodb数据库引擎的数据库或表才能支持事务

    show engiens --查看服务器支持的引擎

    默认以自动提交模式运行

事务并发问题

     1.脏读:读取了没有永久性的数据

     2.不可重复读:修改操作造成的影响,行锁解决

     3.幻读:插入操作造成的影响,表锁解决

事务隔离级别:

      

事务隔离级别脏读不可重复读幻读
读未提交
读已提交
可重复读
串行化

 

      语句:

         select @@tx_isolation 查询默认隔离级别

         set session transaction isolation level XXX 设置当前会话隔离级别

TransationDefinition接口

     1.隔离级别

     2.默认超时 TIMEOUT——DEFAULT
     3.事务传播行为

Spring编程式事务处理

   基于底层API的编程式事务管理

        PlatformTransactionManager

        TransactionDefinition

        TranscationStatus

   基于TransactionTemplate的编程式事务管理

         TransactionTemplate

Spring声明式事务处理

     概述:Spring的声明式事务处理是建立在AOP上,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者声明一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务

     建议开发中使用,因为代码干净,维护方便

    方式:

       1.基于TransactionInterceptor的声明式事务处理

       2.基于TransactionProxyFactoryBean声明式事务处理

       3.基于<TX>命名空间的声明式事务方式

       4.基于@Transactional的声明式事务管理

SpringAspect

      概念:是一个基于Java语言AOP框架

                 Spring2.0以后增加了对AspectJ切点表达式的支持

                  @AspectJ是Aspect1.5新增功能,通过JDK1.5注解技术,允许在Bean类中定义切面

                 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值