zoukankan      html  css  js  c++  java
  • Spring4

    Spring是位于业务逻辑层的一个框架, 它和前面的struts 、 Hibernate组成了SSH 组合 。 它里面包含两个核心, IOC  + AOP

    • 什么是IOC

    • IOC 的全称是 Inversion Of Control 翻译过来是控制反转的意思。

    • 什么是AOP

    • AOP为Aspect Oriented Programming的缩写,意为:面向切面编程

    • IOC 的全称是 Inversion Of Control 翻译过来是控制反转的意思。 通俗的话说: 就是把对象的创建工作交给spring来完成。
    • 以前创建对象:手动创建  new XXX();
      现在创建对象:都是由spring来创建(action  |service  | dao 这些类一般都交给spring来完成。)
      

      Spring入门

    • 导入jar包
    • 声明业务逻辑类
    • 在src下新建xml文件,导入约束
    • 在xml里面托管要让spring创建实例的类
    • 创建工厂,问工厂要实例对象。
    • 使用对象调用方法
    • spring入门详解

    • xml的解释
    • <!-- 使用bean标签来告诉spring,让它创建哪一个类的实例对象
              一般只会把三个层级的类给spring来创建  actionservicedao  扩展增强的类(AOP)
      id | name :表示的是唯一标识符。以后拿着这个值就能找到具体的类实例
              class : 托管了类的全路径 Class.forName();
              
              默认生成的实例是单例..只有一个实例。
              如果想做多个实例。
                  scope="prototype"
                  
              init-method:初始化对象的时候调用具体的方法
              
              destroy-method:销毁实例的时候调用具体的方法
              
                     单例情况下,会执行销毁方法。 多例则不会。
          
           -->
            <bean id="us" class="com.itheima.service.impl.UserServiceImpl"  scope="prototype"
                init-method="init" destroy-method="destroy"
            ></bean>
    • 代码的解释
    • //创建工厂 classpath: 类路径,其实就是src下的所有资源,在编译的时候,会搬到bin/classes/  
          //类加载器 
          //创建工厂,需要依赖xml文件。
          ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
          
          //问工厂要对象
          UserService userService = (UserService) context.getBean("us");
          userService.save();
          //关闭工厂,但是一般不会关闭。
          ((AbstractApplicationContext) context).close();
    • Spring IOC实例化方式

    • 无参构造方式(最简单的)【重点】

    • 要求托管的类,需要具备无参构造方法
    • public class UserServiceImpl implements UserService {
      @Override
              public void save() {
                  System.out.println("调用了UserServiceImpl的save方法~~!");
              }
          
          }
      
      xml:
       <bean id="us" class="com.itheima.service.impl.UserServiceImpl"></bean>
    • 静态工厂方法

    • public class StaticFactory {
      public static UserService getBean(){
                  System.out.println("执行了静态方法创建对象~~~");
                  return new UserServiceImpl();
              }
          }
      
      xml:
      
           <!-- 静态工厂方法: 拿着us 过来找spring的工厂,spring会去找StaticFactory,然后调用这个类中的getBean方法获取对象 -->
         <bean id="us" class="com.itheima.factory.StaticFactory" factory-method="getBean"></bean>
    • 实例工厂方法

    • 要求我们自己提供工厂,而且工厂要返回类的实例,工厂方法是非静态的。
    •     public class InstanceFactory {
          public  UserService getBean(){
                  System.out.println("执行了非静态方法创建对象~~!!!~");
                  return new UserServiceImpl();
              }
          }
      
      xml:
      
          <bean id="factory" class="com.itheima.factory.InstanceFactory"></bean>
         
         <!-- 当spring工厂拿到us的时候,会拿着Factory这个名称先去上面找到对应的bean,然后把class的实例给创建出来,进而调用工厂方法 -->
         <bean id="us" factory-bean="factory" factory-method="getBean"></bean>

      不管是静态工厂还是实例工厂,都没有解决掉核心问题。 具体类的实例其实还是由程序员来创建,spring的工厂只不过是做了一个跳转作用而已。所以这两种方式不推荐使用。

  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/appc/p/7978706.html
Copyright © 2011-2022 走看看