• Spring基本概念


    Spring框架

    1. Spring框架的作用
    2. Spring 的核心(IOC功能)
    3. SpringAOP功能

    请求—>servlet-àservice---->多个dao—jsp

    Spring一般将【servlet-àservice---->多个dao—>jsp】交给IOC和AOP管理

    (管理组件对象,维护对象关系,降低组件耦合度)

    Spring Web MVC功能:MVC设计 目的:架构一个MVC结构的web程序

    注意:(2和3可选择)

    1. Spring整合其他技术,例如JDBC,Hibernate,struts,Mybatis等
    2. Spring—>整合API---->调用原有技术API()

     SpringIOC应用

      IOC概念:Inversion of Control控制反转或反向控制

           控制反转:改变对象的获取方式。之前编码方式采用new构造器方式获取对象;IOC中用由容器创建对象之后注入进来使用。只要修改配置就可以改变对象关系,实现组件间的解耦。(管理创建组件对象,依赖注入信息)

      1)管理对象:创建,初始化,释放资源,销毁

      2)维护对象关系

    搭建SpringIOC开发环境

    ----引入相关jar包

    ----在src下添加applicationContext.xml

    举例:

    1)原始方法获得一个对象

    package test;
    
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class TestBean {
        public static void main(String[] args) {
            Calendar c=new GregorianCalendar();
            Calendar c1=Calendar.getInstance();
            System.out.println(c);
            System.out.println(c1);
        }
    }

     2)SpringIOC的创建对象的方式

     具体流程:

    SpringIOC容器----->管理组件及对象关系

    1. 创建ApplicationContext对象
    2. 向applicationContext.xml配置<bean>
    3. 利用ApplicationContext对象getBean()

    管理对象

     在applicationContext.xml添加相关配置:

    (1)创建对象(构造方法

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
         <!--采用new  GregorianCalendar(),构造方法-->
       <bean id="c1" class="java.util.GregorianCalendar">
       </bean>
    </beans>

    测试:

    package test;
    
    import java.util.Calendar;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class test {
        public static void main(String[] args) {
            String conf="applicationContext.xml";
            ApplicationContext ac=new ClassPathXmlApplicationContext(conf);
            Calendar c1=ac.getBean("c1",Calendar.class);
            //使用
            System.out.println(c1);
        }
    }

    (2)创建对象(静态工厂方法

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
         <!--采用new  GregorianCalendar(),构造方法-->
       <bean id="c1" class="java.util.GregorianCalendar">
       </bean>
        <!--采用Calendar.getInstance(),静态工厂方法-->
       <bean id="c2" class="java.util.Calendar" factory-method="getInstance"></bean>
    </beans>

    (3)创建对象(对象工厂方法)---封装了对象的创建细节

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
         <!--采用new  GregorianCalendar(),构造方法-->
       <bean id="c1" class="java.util.GregorianCalendar">
       </bean>
        <!--采用Calendar.getInstance(),静态工厂方法-->
       <bean id="c2" class="java.util.Calendar" factory-method="getInstance"></bean>
         <!--采用c2.getTime(),对象工厂方法-->
       <bean id="date" factory-bean="c2" factory-method="getTime"></bean>
    </beans>

    测试:

    package test;
    
    import java.util.Calendar;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class test {
        public static void main(String[] args) {
            String conf="applicationContext.xml";
            ApplicationContext ac=new ClassPathXmlApplicationContext(conf);
            Calendar c1=ac.getBean("c1",Calendar.class);
            //使用
            System.out.println(c1);
            
            Calendar c2=ac.getBean("c2",Calendar.class);
            System.out.println(c2);
            Date date=ac.getBean("date",Date.class);
            System.out.println("date="+date);
        }
    }

    SpringIOC创建Bean对象的控制

    1. 控制对象创建方式(使用范围)

             在bean元素中使用scope属性控制,可以支持singleton或prototype,默认是singleton

                                <bean scope=”singleton”>该组件在Spring 中只有一个bean对象</bean>

                                <bean scope=”prototype”>该组件在Spring 中每次ac.getBean(“id”)都返回一个新的对象</bean>

    <bean id="e1" scope="prototype" class="org.web.bean.ExampleBean"></bean>

      2.指定对象初始化方法

      Java(原始方式使用构造器)

           Spring方式:先在org.tarena.bean.ExampleBean中添加init方法,然后 用<bean>元素的init-method指定初始化方法

    <bean id="e1" scope="prototype" 
     init-method="init" class="org.web.bean.ExampleBean"></bean>

          3.指定对象销毁方法:destroy-method属性

          利用<bean>元素的destroy-method指定,满足下面条件才有效

          -----1)组件对象为单利模式

          -----2)调用AbstractApplicationContext容器对象的close()方法

    <bean id="e1" scope="prototype" 
     init-method="init" destroy-method="mydestory" class="org.web.bean.ExampleBean"></bean>

           4.控制单例对象创建时机

            在默认情况下,单例对象是Spring容器创建时实例化;可以使用<bean>元素的lazy-init=true属性将创建的时机推迟到getBean()方法调用时。

    <bean id="e1" scope="prototype" 
     lazy-init="true" init-method="init" destroy-method="mydestory" class="org.web.bean.ExampleBean"></bean>

    IOC维护对象关系

     采用注入方式创建对象关系Dependency Injection依赖注入(DI)

      依赖注入:set方法注入构造器注入;

    set方法注入

    创建copputer类,添加set和get方法

    package com.web.entity;
    import java.io.Serializable;
    public class Computer implements Serializable {
       private String cpu;
       private String hdd;
       private String mainbord;
       //显示配置信息
       public void show(){
           System.out.println("cpu"+cpu);
           System.out.println("hdd"+hdd);
           System.out.println("mainbord"+mainbord);
       }
    public String getCpu() {
        return cpu;
    }
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    public String getHdd() {
        return hdd;
    }
    public void setHdd(String hdd) {
        this.hdd = hdd;
    }
    public String getMainbord() {
        return mainbord;
    }
    public void setMainbord(String mainbord) {
        this.mainbord = mainbord;
    }
       
    }

    在容器中配置信息(set注入)

    <bean id="p1" calss="com.web.entity.Computer">
       <!--信息set注入-->
       <property name="cpu" value="i7"></property>
       <property name="hdd" value="索尼"></property>
       <property name="mainbord" value="华硕"></property>
    </bean>

    测试:

    String conf="applicationContext.xml";
            ApplicationContext ac=new ClassPathXmlApplicationContext(conf);
           Computer c=ac.getBean("p1",Computer.class);
            c.show();

    构造器注入

    创建Phone类,添加构造器方法

    package com.web.entity;
    
    import java.io.Serializable;
    public class Phone implements Serializable {
        private String cpu;
        private String ram;
       //构造器
    public Phone(String cpu,String ram){ this.cpu=cpu; this.ram=ram; } public void show(){ System.out.println("手机配置"); } public String getCpu() { return cpu; } public void setCpu(String cpu) { this.cpu = cpu; } public String getRam() { return ram; } public void setRam(String ram) { this.ram = ram; } }

    在容器中配置信息:构造器注入

    <bean id="p2" calss="com.web.entity.Phone">
       <!--构造器注入-->
          <constructor-arg index="0" value="高通"></constructor-arg>
           <constructor-arg index="1" value="2G"></constructor-arg>
    </bean>

    注入对象(set方式)

    创建students类,包含computer和Phone

    package com.web.entity;
    import java.io.Serializable;
    public class Students implements Serializable {
        private Computer c;
        private Phone p;
        public void show(){
            c.show();
            p.show();
        }
    }

    在容器中配置注入对象

    <bean id="p1" calss="com.web.entity.Computer">
       <!--set注入computer-->
       <property name="c" ref="p1"></property>
       <property name="p" ref="p2"></property>
    </bean>
  • 相关阅读:
    Java服务,内存OOM了,如何快速定位?
    Java内存分析工具MAT(Memory Analyzer Tool)安装使用实例
    jmap使用方法及原理
    可能发生Full gc 的情况
    java--jvm GC-常用参数配置
    JVM. GC 性能调优方法与思路
    《嫌疑人X的献身》——两个天才之间的思想火花
    爱的纯粹与代价
    18年下半年计划表
    阿里校招准备-总纲
  • 原文地址:https://www.cnblogs.com/peachwang/p/7416659.html
Copyright © 2020-2023  润新知