Spring学习笔记

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

一、Spring优点

  1. 低侵入式设计,代码的污染极低
  2. 独立于各种应用服务器,基于spring框架的应用,真正实现一次写入,到处运行
  3. IOC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
  4. AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,提高复用性
  5. ORM和DAO提供了与第三方持久层框架的良好整合,简化了底层的数据库访问

二、程序框架


    Core Container 核心容器
        spring-core:Spring中核心工具类包
        spring-bean:Spring中定义bean的组件
        spring-context:Spring的运行容器
        spring-context-support:Spring容器的扩展支持
        spring-expression:Spring的表达式语言支持
    AOP 面向切面编程
        spring-aop:基于代理的AOP支持
        spring-aspect:继承Aspect的AOP支持
    WEB(MVC)
        spring-web:提供web的基础功能
        spring-webmvc:提供springmvc的功能
        spring-websocket:提供web socket支持
        spring-webmvc-portlet:提供Portlet环境的支持
    Data Access/Integration-数据访问/集成
        spring-jdbc:提供对jdbc连接的封装功能
        spring-tx:提供对事务的支持
        spring-orm:提供对象-关系映射支持
        spring-jms:提供消息队列的支持
        spring-oxm:提供对象-XML映射支持
    Test 测试
        spring-test:提供对测试功能的支持

三、核心机制
    1、管理Bean,ApplicationContext接口实现类
        1)ClassPathXmlApplicationContext:从类加载路径下搜索配置文件,并根据配置文件创建spring容器
        2)XmlWebApplicationContext:从Web的应用的XML文件中读取上下文
        3)FileSystemXMLApplicationContext:从文件系统的相对路径活绝对路径下去搜索配置文件,并根据配置文件创建spring容器
        4)Bean的作用域
            ①singleton单例模式
            ②prototype:每次通过容器的getBean方法获取prototype作用域的Bean时,都将产生一个新的Bean实例
            ③request:对于一次Http请求,request作用域的Bean将只生成一个实例,Web应用使用Spring时,该作用域才真正有效
            ④不指定Bean的作用域,Spring默认使用singleton作用域
        public class BeanTest {
               public static void main(String[] args) {
                    ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
                    Person p = ctx.getBean("person",Person.class);
                    p.getName();
                 }
         }

        5)BeanFactory和FactoryBean
           ①BeanFactory是IOC容器的核心接口,负责生产和管理bean,它为具体的IOC容器提供了最基本的规范
           ②FactoryBean是一个接口,当在IOC容器中的Bean实现了FactoryBean后,通过getBean(String BeanName)获取到的Bean对象并不是FactoryBean的实现类对象,而是这个实现类中的getObject()方法返回的对象。要想获取FactoryBean的实现类,就要getBean(&BeanName),在BeanName之前加上&。

        6)BeanFactory和ApplicationContext区别
          ①BeanFactory可以理解为含有bean集合的工厂类,包含了各种bean的定义,以便在接收到客户端请求时将对应的bean实例化,包含bean生命周期的控制,调用客户端的初始化方法和销毁方法
          ②BeanFactory的扩展,增加了1,提供支持国际化的文本消息,2,统一的资源文件读取方式3、已在监听器中注册的bean的事件
    2、控制反转(IOC): 在编译阶段尚未知所需的功能来自哪个类的情况下,将其他对象所依赖的对象实例化的模式
       1)原始做法:调用者主动创建被依赖对象,然后再调用被依赖对象的方法
       2)简单工厂模式:调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,然后再调用被依赖对象的方法
       3)使用Spring框架:调用者无需主动获取被依赖对象,调用者只要被动接受spring容器为调用者的成员变量赋值即可
            有三种注入方式:①设值注入:setter方法注入;②构造注入:可以决定依赖关系的注入顺序;成员变量过多导致构造器笨重③ 接口注入

       4)自动装配
    no: spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义时用标签明确的设置依赖关系
    byName:根据bean名称设置依赖关系
    byType:根据bean类型设置依赖关系
    constructor: 构造器的自动装配和byType类似,仅适用于与有构造器相同参数的bean
    autodetect:自动探测适用构造器自动装配或byType自动装配
    3、AOP:面向切面编程,常用通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等
        切面(Aspect):用于组织多个Advice,Advice放在切面中定义
        连接点(Jointpoint):程序执行过程中明确的点
        增强处理(Advice):AOP框架在特定的切入点执行的增强处理有arround、before和after等类型
        切入点(PointCut):可以插入增强处理的连接点

          AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用:

1)定义普通业务组件
           2)定义切入点,一个切入点可能横切多个业务组件
           3)定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作

四、动态代理
    1、Jdk动态代理
        <aop:aspectj-autoproxy />proxy-target-class属性默认false为jdk动态代理
        实现InvocationHandler接口,重写invoke方法,使用Proxy类的newProxyInstance传入目标类加载器和实现接口完成代理对象的创建
    2、Cglib动态代理
        <aop:aspectj-autoproxy  poxy-target-class="true"/>
        实现MethodInterceptor,重写intercept方法,使用Enhancer对象对目标对象创建子类对象传入callback对象对目标增强完成动态代理
    3、不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用CGLib动态代理

五、使用到的设计模式
    代理模式:在AOP和remoting中被用的比较多
    单例模式:在spring配置文件中定义的bean默认为单例模式
    模板方法:用来解决代码重复问题,比如restTemplate,JmsTemplate,JpaTemplate
    前端控制器: 提供了DispatcherServlet对请求进行分发
    视图帮助:JSP标签整合
    工厂模式: BeanFactory用来创建对象的实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值