spring入门

SSM框架

  • Spring + springMVC + mybatis

作用

  • 管理对象: 当开发人员需要某一个类的对象时,不需要自行new对象,而是通过spring直接获取即可

使用

【掌握】通过spring获取存在无参构造方法类的对象

  • 创建Maven Project

  • 当项目创建好之后,生成web.xml,解决默认提示错误

  • 选择tomcat, 项目右击 - > properties -> Target Runtimes

  • 打开 http://mvnrepository.com,搜索springwebmvc,在结果中找到的Grouporg.springframework,选择版本,并且复制xml代码

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.12.RELEASE</version>
</dependency>
  • 配置spring的配置文件(applicationContext.xml)
<!-- id: 自定义名称
        class : 需要spring管理的类的路径
     -->
    <bean id="date" class="java.util.Date"></bean>
  • 测试
import java.util.Date;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDemo1 {
    public static void main(String[] args) {
        //spring的配置文件
        String conf="applicationContext.xml";
        //获取spring容器
        AbstractApplicationContext context=new ClassPathXmlApplicationContext(conf);
        //获取配置文件中指定的bean,参数是自定义的id
        Date date=(Date) context.getBean("date");
        //打印出日期,对象创建成功
        System.out.println(date);
        context.close();
    }
}

内存泄露或者内存溢出

  • 当需要释放某个对象所占用的内存空间时,如果对象没有正确关闭,将导致无法释放,由于这个对象可能已经没有了引用,这个对象再也无法使用,却一直被误认为被使用,就会变成长期存在于内存中的垃圾数据,就是内存泄露

  • 其实少量的内存泄露是灭有危害的。但是如果存在大量的内存泄露,就可导致可用内存明显变少,计算机的运行性能就会下降,当内存泄露到极点的时候,就会溢出。尽管少量的内存泄露是没有危害的,但是应该严谨的编程,尽量不要出现内存泄露

【了解】通过spring获取类中不存在无参构造方法,但是存在静态工厂方法类的对象

  • 我们使用spring获取java.util.Calendar的对象

  • factory-method : 这个属性指定的静态工厂方法

  • 在spring的配置文件中配置这个对象

    <!-- 通过静态工厂方法创建对象
        id : 自定义的名称
        class: 类的全路径
        factory-method : 静态工厂方法
     -->
    <bean  id="calendar" class="java.util.Calendar" factory-method="getInstance"></bean>
  • 测试
@Test
    public void testStatice() {
        // spring的配置文件
        String conf = "applicationContext.xml";
        // 获取spring容器
        AbstractApplicationContext context = new ClassPathXmlApplicationContext(
                conf);
        // 获取配置文件中指定的bean,参数是自定义的id
        Calendar calendar=(Calendar) context.getBean("calendar");
        // 打印出日期,对象创建成功
        System.out.println(calendar.getTime());
        context.close();
    }

【了解】类中不存在无参构造方法,也没有静态工厂方法,但是存在实例工厂方法

实例工厂方法

  • 实例工厂方法: 指另一个类中有工厂方法,可以获取目标类型的对象,即X类中有工厂方法(非静态的)可以获取Y类的对象

实例

  • 假设存在PhoneFactory类中,该类中有非静态方法getPhone()可以获取Phon类型的对象,并且Phone没有无参构造方法

  • Phone

public class Phone {
    public String name;
    public Phone(String name) {
        this.name=name;
    }
}
  • PhoneFactory
public class PhoneFactory {
    public Phone getPhone() {
        return new Phone("小米6");
    }
}

  • spring配置文件
    • factory-bean : 是工厂类的id
    • factory-method : 工厂类获取Phone对象的非静态的方法
<!-- 配置工厂类 -->
    <bean id="phoneFactory" class="cn.tedu.spring.beans.PhoneFactory"></bean>

    <!-- 配置Phone类的对象
        factory-bean : 是工厂类的id
        factory-method : 工厂类获取Phone对象的非静态的方法
     -->
    <bean id="phone" class="cn.tedu.spring.beans.Phone" factory-bean="phoneFactory" factory-method="getPhone"></bean>

Bean的作用域(Scope)

  • 默认情况下,由spring配置的对象是单例的
  • 在配置时,在<bean>节点添加scope属性即可调整,当该属性为singleton时是单例的,当属性为prototype为非单例的
    <!-- id: 自定义名称
        class : 需要spring管理的类的路径
     -->
    <bean id="date" class="java.util.Date" scope="prototype"></bean>

单例(Singleton)

懒加载

  • 在默认情况下,spring创建对象的是使用饿汉式,即是在spring配置文件开始加载的时候就创建对象,但是我们可以使用lazy-init取值我true的时候,就会使用懒加载(懒汉式)
<bean id="date" class="java.util.Date" scope="singleton" lazy-init="true"></bean>

prototype

  • 一个Bean定义对应多个对象实例

request

  • 在一次Http请求中,一个Bean只创建一个实例,仅限于web环境

session

  • 在一个HttpSession中,一个Bean定义对应一个实例

globalSession

  • 在一个全局的HttpSession中,一个bean定义对应一个实例

Bean的延迟初始化

  • 在spring创建Bean的实例的时候默认是使用单例,并且是饿汉式加载,即是在spring的配置文件在开始加载的时候就创建bean的实例对象

  • 但是我们可以使用lazy-init来延迟初始化,使用懒加载即可,当lazy-init为true的时候便是延迟加载

<bean id="date" class="java.util.Date"  lazy-init="true"></bean>
  • 我们还可以在<beans>根节点中添加一个default-lazy-init,可以为容器中的所有bean设置为懒加载
<beans default-lazy-init="true"></beans>

spring配置文件的全部约束

<?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:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
</beans>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269