Spring

1.Spring的核心构成

      IOC     Spring最核心的模块

      DAO    Spring对访问数据库的支持,主要是JDBC

      MVC     Spring对MVC设计模式的支持(SSM)

       AOP     (Aspect  Orientied  Programing)面向切面编程

      ORM      对象关系映射       Spring 和ORM框架整合   Mybatis

2. IOC(Inversion  of  Controller)控制反转,容器提供对象;

3. Spring容器是用来管理Bean组件的,Spring容器实现了IOC 和AOP,Spring容器对应的类型ApplicationContext 和                    BeanFactory;

4.Spring容器使用先导包(IOC和AOP)

5.Spring容器创建bean对象的三种方式

       1.   使用构造方法来创建对象,默认使用无参   

                <bean id="对象id"  class="包名+类名"></bean>

        2.  使用静态工厂方法

                 <bean id="对象标示"   class="工厂的包名+类名"   factory-method=""静态工厂方法名></bean>

         3.使用实例化工厂方法

               <bean id="标示"  class="目标对象的包名+类名"  factory-bean="工厂对象的标识"  factory-method="实例化工厂方法"></bean>    

 6.  Spring 容器中bean对象的作用域  使用bean 标签中的scope 来指定

        scope="singleton/prototype'     

7.DI(Dependence Injection 依赖注入)解决组件的装配问题,DI是IOC的一种具体实现手段

8.DI的实现方式

    1.setter 注入

     <bean id="player"  class="com.xdl.bean.Player">

       <property  name="name"  value="shenge"/>

       <property  name="age"  value="18"/>

     </bean>

     2.构造器注入

                <bean id="player"  class="com.xdl.bean.Player">

                    <constructor-arg  index="0"  value="chen"/>

                     <constructor-arg  index="1"   value="18"/>

               </bean>

     3.自动注入

         <bean  id=""  class=""  autowire="no/byName/byType/constructor/autodetect"></bean>

                no  默认值    byName  根据属性的名字   byType   根据类型去查找

                 constructor   优先按照构造方法参数的名字去查找,如果找不到,

      4. 组件扫描

          4.1  作用:

                Spring 提供了一套基于标注(注解)的配置方式,简化XML配置;

           4.2  

          拷贝spring 容器对应的配置文件    并且在这个配置文件 中 开启组件扫描 

       <context:component-scan    base-package="包名">  </context:componet-scan>

         4.3 组件的名字问题

            默认是类名首字母小写 当然也可以指定加载到容器中的组件名


 5.Oracle 数据库连接参数(db.properties)

      driverClassName=oracle.jdbc.OracleDriver
      url=jdbc:oracle:thin:@127.0.0.1:1521:xe
      username=system
       password=123456

       maxActive=30

    dbcp连接(xml配置)

       <!-- 使用 db.properties 文件构建一个集合  -->
      <util:properties id="dbparam"  location="classpath:db.properties"></util:properties>
      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
         <property name="driverClassName"  value="#{dbparam.driverClassName}"></property>
         <property name="url" >  <value>#{dbparam.url}</value></property>
         <property name="username"  value="#{dbparam.username}"></property>
         <property name="password"  value="#{dbparam.password}"></property>
    </bean>     

  6.组件扫描

           @PostConstruct    构造方法之后进行初始化

           @PreDestroy      销毁之前指定销毁方法

           @Scope              指定对象作用域

           @Value               注入容器中的值(之前可以注入简单类型,现在对象类型也可以注入)        

           @Autowired      可以用在成员变量,set方法,构造方法上(参数个数要匹配),有限按照类型查找,如果找不到则按照名字查找,配合@Qualifier  可以直接指定名字进行查找,这样不能放在构造方法上;

            @Resource         可以用在成员变量 set方法上,java 的基本标注

  7.Spring DAO

        data access object    数据访问对象,以面向对象的方式访问数据库,对JDBC做了封装和简化,提供了AOP模式的事物处理,把JDBC的异常处理进行封装,由原来的检查异常(必须处理)变成了一个 DataAccessException  ,这个异常集成了RunTimeException;

     Spring DAO 将最核心的封装交给了JdbcTemplate ,这个对象来负责加载驱动 连接获取 执行环境获取 资源释放等。使用JdbcTemplate 有两种方式,第一:继承JdbcDaoSupport类,第二:手动注入JdbcTemplate;

  第一种方式:

@Resource
public void setMyDataSource(DataSource dataSource) {
// 传给父类
super.setDataSource(dataSource);
}
@Override
public int getBankAccountCount() {
// 使用父类中对应的模板 完成查询
return  super.getJdbcTemplate().queryForInt("select count(*) from xdl_bank_account");

}

    RowMapper对象

    public class BankAccountMapper implements RowMapper<BankAccount> {


@Override
public BankAccount mapRow(ResultSet rs, int arg1)
throws SQLException {
return  new BankAccount(rs.getInt("id"),rs.getString("card_no"),
rs.getString("card_name"),rs.getString("card_password"),
rs.getDouble("card_money"));
}

}

8.事务  在进行一组dml语句操作  要求这组sql语句同时成功,或者同时失败

      事务的四大特性:

              原子性:事务中的语句是一个逻辑整体,必须同时成功,或者同时失败

              一致性:数据一旦变化,提交之后 就不会轻易改变

              持久性:跟一致性差不多

              隔离性:解决数据库的三大读问题;

                          脏读:一个事务读取了另一个事务中没有提交的数据;(关系型数据库已经解决了脏读)

                           不可重复读: 一个事务在开始时 查询一个数据 在这个事务处理的过程中 另一个事务对这份数据做了修改,这样前后读到的数据就不同了;

                            幻读:不可重复读关注的是更改     幻读关注的时增删

                  隔离性对应四个隔离级别  读未提交  读提交  可重复读     序列化

9.AOP面向切面编程(切面---通知---切点)

   1.可以通过配置形式将操作纳入到事务管理中,只缺钱只能硬编码来处理事务,现在可以用更加灵活的配置方式

   2. 代码逻辑和事务控制 可以松耦合   要去掉事务控制代码  可以再配置文件中进行移除

   开启事务:

    <tx:annotation-driven transaction-manager="事务管理器"  proxy-target-class=""/>

     transaction-manager  事务管理器   需要我们在容器中自己定义 

    proxy-target-class   代理类是否优先使用  CGLB sun公司有jdk的代理  这里要求被代理类必须实现一个接口 true 代表有限使用CGLIB,在需要事务的方法上 加@Transactional



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值