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来创建  action\service\dao \ 扩展增强的类(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的工厂只不过是做了一个跳转作用而已。所以这两种方式不推荐使用。

posted @ 2017-12-04 19:52  Dear丶配角  阅读(213)  评论(0编辑  收藏  举报