• 笔面试复习(spring常用.jar包/事务/控制反转/bean对象管理和创建/springMVC工作原理/sql查询)


    ###spring常用jar包
    1.spring.jar是包含有完整发布模块的单个jar包。
    2.org.springframework.aop包含在应用中使用Spring的AOP特性时所需要的类。
    3.org.springframework.aspects提供了面向切面的功能。
    4.org.springframework.beans所有应用都要用到的,包含访问配置文件/创建和管理bean
    以及进行Inversion of Control/Dependency Injection(IOC/DI)操作相关的所有的类。
    5.org.springframework.context为Spring核心提供了大量模板扩展
    6.org.springframework.core包含核心工具类
    7.org.springframework.expression Spring 表达式语言.
    8. org.springframework.test 对 Junit 等测试框架的简单封装。
    9. org.springframework.transaction 为 JDBC、Hibernate、JDO、JPA 等提供的一致的声明式和编程式事务管理。

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ### 关于事务(Transaction)

    在同一次操作中,如果涉及2次或更多次的增删改操作(例如1次UPDATE和1次DELETE,或2次INSERT),则应该使用事务!

    在使用SSM框架时,如果需要使用事务,则使用`@Transactional`对业务类中的那个方法进行注解!则该方法会以事务的模式去执行,也就是说,这个方法中的多次增删改操作要么全部成功,要么全部失败!

    在使用`@Transactional`注解后,不需要手动使用代码开启事务、提交事务、回滚事务,在没有错误的情况下,会全部成功,仅当程序运行至抛出`RuntimeException`时,会自动回滚!

    所以,在编写业务类中的方法时,如果执行增删改操作出错(并不一定是SQL语法错误,凡是不符合我们设定的数据逻辑的,都视为错误),则应该抛出`RuntimeException`,使得事务自动回滚!

    使用`@Transactional`也可以对类进行注解,表示这个类中所有的方法都将以事务的模式去运行,但是,一般并不推荐这样做,因为,同一个Service类中,毕竟还是有很多方法不会涉及多次增删改操作,则这些方法没有必要使用事务。

    使用以上Spring-JDBC的自动事务处理,框架完成的模式大致是:

    tx.begin(); // 开启事务
    
    try {
    // 执行?条SQL
    } catch(RuntimeException e) {
    tx.rollback();
    }
    
    tx.commit(); // 提交事务

    需要添加相应的注解驱动:

    <bean 
    id="transactionManager"
    class="xx.xx.xx.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
    </bean>
    
    <tx:annotaion-driven 
    transaction-manager="transactionManager" />

    小结:在编写业务类中的方法时,如果执行出错,则应该抛出`RuntimeException`。凡是涉及多次增删改操作的方法,都使用`@Transactional`注解。

    说明:有空了解事物传播。(找个例子)

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    IOC:创建对象控制权被反转到了 Spring框架。
    说明:
    关于IOC,它灵魂在于各个bean内部只关注自己的业务,而对于bean的生成、注入、销毁这些管理过程,
    统一交由springframework的上下文来管理,业务类的逻辑无感知,因此降低了耦合度和维护成本,但是底层用了大量的反射,
    占据了大量的内存,所以也会使系统性能变慢。

    DI:在创建对象时,动态的将依赖对象注入到Bean组件中。

    AOP:(比如登录的时候拦截器***/比如事物处理等)一个任务的几个步骤中间插入一个小的事件或步骤,这就叫面向切面。
    补充说明:Spring框架中的AOP拦截技术,其底层实现原理,是动态代理技术。对于面向接口的方法拦截,
    依赖于jdk的动态代理技术(看看笔记)。

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ##1.创建bean对象

    三种形式:

    1.使用无参的构造方法(重点)

    <bean id="" class="xx.xx.ClassName"/>

    2.静态工厂方法实例化bean对象(了解)

    对象是由静态方法获取的实例,把静态方法获取实例对象的模式,叫静态工厂方法实例化bean对象

    Calendar cd = Calendar.getInstance();

    <bean id="cl" class="java.util.Calendar"
    factory-method="getInstance"/>

    3.实例工厂方法实例化bean对象(了解)

    在cn.tedu.demo包中,定义类

    public class BeanFactory{
    public Calendar getCalendar(){
    return Calendar.getInstance();//
    }
    }


    //先创建对象 然后调用方法

    <bean id="beanFactory" class="xx.xx.BeanFactory"/>
    
    <bean id="calendar" class="java.util.Calendar" factory-method="getCalendar" factory-bean="beanFactory" />

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    ##2.管理bean生命周期

    bean的创建到销毁(从生到死)这个过程,叫生命周期
    在cn.tedu.demo包中,

    public class BeanLife{
    public BeanLife(){
    .....("BeanLife");
    }//创建对象
    public void init(){
    .....("init");
    }//初始化
    public void destroy(){
    .....("destroy");
    }//销毁
    }


    配置文件

    <!-- bean的生命周期 -->
    <!-- init-method 表示定义初始化方法的方法名 
    destroy-method 表示定义销毁方法的方法名
    -->
    <bean id="beanLife" 
    class="cn.tedu.demo.BeanLife"
    init-method="init"
    destroy-method="destroy"/>

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    springMVC五大部件和工作原理

    ...

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ###SQL:查询

    +--------+---------+---------+
    | name | kecheng | fengshu |
    +--------+---------+---------+
    | 张三 | 语文 | 80 |
    | 张三 | 数学 | 75 |
    | 李四 | 语文 | 76 |
    | 李四 | 数学 | 90 |
    | 王五 | 语文 | 81 |
    | 王五 | 数学 | 100 |
    | 王五 | 英语 | 90 |
    +--------+---------+---------+

    求每科成绩都大于80分的学生的姓名:

    select distinct name from score where name not in(select name from score where fengshu < 80);
    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    Ubuntu+XAMPP+Wordpress的安装与配置问题
    Html5最简单的游戏Demo——Canvas绘图的骰子
    Html5最简单的游戏Demo——Canvas绘图的弹弹球
    LinqToExcel: LINQ查询Excel电子表格
    Asp.Net Web API开发微信后台
    Json.Net使用JSON Schema验证JSON格式【实例】
    Json.Net使用JSON Schema验证JSON格式
    LeetCode-C#实现-哈希表(#349)
    大话设计模式-解释器模式
    大话设计模式-享元模式
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/9651560.html
Copyright © 2020-2023  润新知