zoukankan      html  css  js  c++  java
  • Spring 3.x 读书笔记



    第一:如果使用BeanFactory作为Spring Bean的工厂类,则所有的bean都是在第一次使用该Bean的时候实例化 
    第二:如果使用ApplicationContext作为Spring Bean的工厂类,则又分为以下几种情况: 
    (1):如果bean的scope是singleton的,并且lazy-init为false(默认是false,所以可以不用设置),
    则ApplicationContext启动的时候就实例化该Bean,并且将实例化的Bean放在一个map结构的缓存中,下次再使用该Bean的时候,直接从这个缓存中取 
    (2):如果bean的scope是singleton的,并且lazy-init为true,则该Bean的实例化是在第一次使用该Bean的时候进行实例化 
    (3):如果bean的scope是prototype的,则该Bean的实例化是在第一次使用该Bean的时候进行实例化


    --------------------------------分割线下为模板回调分离法---------------------------------

    8.3spring统一数据访问模板

    固定的部分在模板类中已经准备好,而变化的部分通过回调接口开放出来,用于定义具体数据访问和结果返回的操作

    我们只需编写好回调接口,并调用模板类进行数据访问就可以。

    9.2

    spring 中的bean默认为singleton 因为对bean中非线程安全的对象采用了ThreadLocal进行了封装

    spring事务管理跟spring dao为不同的持久化实现提供了模板类一样,也提供了事务模板类TransactionTemplate 通过模板类并配合使用事务回调TransactionCallback指定具体的持久化操作就可以通过编程方式实现事务管理,而无需关注资源获取、复用、释放、事务同步和异常处理的操作。

     

     

     

    execute() 方法 部分截取 模板类TransactionTemplate  extends DefaultTransactionDefinition

    TransactionStatus status = this.transactionManager.getTransaction(this); 
    //this 代表transactionDefinition transactionManager将definition量化为status

    Object result = null;
    try {
    result = action.doInTransaction(status);
    //TransactionCallback action 执行事务(用户编写) 事务状态由status定义 执行事务过程如果遇到异常会将status状态改变
    }
    catch (RuntimeException ex) {
    // Transactional code threw application exception -> rollback
     rollbackOnException(status, ex);
    throw ex;
    }
    catch (Error err) {
    // Transactional code threw error -> rollback
     rollbackOnException(status, err);
    throw err;
    }
    this.transactionManager.commit(status);
    // 事务执行完毕提交事务,如果事务执行过程遇到异常 status 置为rollbackonly 此时事务回滚 反之提交事务!
    return result;

    AOP:看得较为粗略

    增强 Advice

    定位连接点的方位信息(相对方法的位置)

    应用于连接点的增强逻辑

    其本身就是一个简单的切面 只不过代表的横切连接点是所有目标类的所有方法

    切点 Pointcut 

    #getClassFilter

    #getMethodMatcher

    通过切点只能定位到某个方法

    连接点 

    由增强和切点确定 表示具体的织入点

     

    ProxyFactory 内部使用的是JDK代理 或 CGLib代理

    #setTraget()  //配置代理目标类

    #addAdvice() //添加增强

     

    StaticMethodMatcherPointcutAdvisor

    RegexpMethodPointcutAdvisor

    DynamicMethodMatcherPointcutAdvisor 对类进行静态检查 对方法进行静态检查 对方法进行动态检查

    ControlFlowPointCut 

    ComposablePointcut

    IntroductionAdvisor 仅有一个ClassFilter

     

    BeanNameAutoProxyCreator 为一组特定配置名的Bean自动创建代理实例

    DefaultAdvisorAutoProxyCreator 对容器中的所有Advisor进行扫描 自动将这些切面应用到匹配的Bean

    AnnotationAwareAspectJAutoProxyCreator 为包含AspectJ注解的Bean自动创建代理实例

    无需为每一个要被代理的Bean都配置一个ProxyFactoryBean


    Spring MVC 

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <!--&lt;!&ndash;<param-value>classpath:applicationContext.xml</param-value>&ndash;&gt;   
    类路径的方式 下面为文件系统绝对路径的方式   -->
        <param-value>file:/Users/luyu/Luyu/javaweb/src/main/resources/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
        <servlet>
            <servlet-name>fbJavaWeb</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>fbJavaWeb</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>

    ContextLoaderListener 启动“业务层”的Spring容器(ApplicationContext)

    DispacherServlet 默认寻找<servlet-name>-servlet.xml 启动Web层的Spring容器(WebApplicationContext)

    web层容器作为业务层容器的子容器 web层容器可以引用业务层容器 反之不可

    DispacherServlet

    protected void initStrategies(ApplicationContext context){
     //初始化:上传文件解析器、本地解析器、主题解析器、处理器解析器、处理器适配器、处理器异常解析器、请求到视图名翻译器、视图解析器
    }

    该方法在 WebApplicationContext初始化后自动执行

  • 相关阅读:
    bzoj1648
    bzoj3404
    bzoj1650
    bzoj1625
    bzoj1606
    bzoj1464
    bzoj1572
    bzoj1617
    bzoj1092
    bzoj1091
  • 原文地址:https://www.cnblogs.com/luyu1993/p/7010118.html
Copyright © 2011-2022 走看看