JavaEE实训----------购物网站
第一话-------今天主要是一些基础知识比如spring和springmvc的环境搭建,java内存,spring中的IOC控制反转和DI依赖注入
所需技术(SSM框架Spring,SpringMVC,Mybatis)+MySQL数据库+html+css+ajax(购物车js,jquery控制)+js
正儿八经开始前,先聊几个问题。
一.java中的内存问题
①高访问量的典型例子—春节抢票,学校选课,双11购物。这些都会引起内存的分配的问题
②在java中创建一个空对象是要消耗字节的(16B);在电脑创建一个空的记事本文件需要4k。
③Java对象在内存中的位置?-------随即分配
随机分配会导致内存不会100%被利用,所以会造成一种现象—内存碎片。Spring很好的解决了这一问题,spring会合理地分配内存。
1.你以为的内存分布
2.实际的内存分布-------出现了内存碎片的问题
二.一个简单的spring案例**
①导入相应的jar包,一般来说,有以下5个就够大多数工程了
②在src底下创建一个application-context.xml文件
③创建一个Java类 写个简单的hello()方法
package com.tedu.model;
public class HelloSpring {
public void hello(){
System.out.println(“hellorenkejie”);
}
}
④ 让spring管理Java对象:在application-context.xml—配置
id:给对象起名字,必须同名(HelloSpring);class:类的全路径(com.tedu.model.HelloSpring)
⑤创建spring容器对象,创建一个测试类
①String path = “application-context.xml”;path为xml配置文件的名字
②ApplicationContext:初始化ApplicationContext context = new ClassPathXmlApplicationContext(path);
第一步是创建spring容器;第二步是从容器中获取对象
* 这里的getBean()中的参数必须与xml配置文件中的id的名字相同。
⑥用对象调用类中的方法 hellospring.hello();运行结果如下:
这里有一个很重要的问题:在spring中new两个对象,那么这两个对象是同一个吗? 答案是对的,解释如下:判断对象是否相等其实就是判断内存地址是否是同一个------------我们这里用System.out.println(hellospring==hellospring1);判断是否相等的方法来验证运行结果为true即是同一个对象,否则不是同一个对象,运行结果如下:
所以我们很显然可以得出这两个对象是同一个。
三.spring中的单例和多例
而且,在默认情况下,通过spring管理的对象都是单例的(不管你new多少次,都是同一个)—省内存(10000个人访问,只new一个对象即可)。
②也可以手动设置成多例的。在xml下 bean的属性的 scope值填为"prototype" 即可。
③如果对象是单例的,这个对象在spring容器初始化时(ApplicationContext context = new ClassPathXmlApplicationContext(path))时
就会被创建,会被spring容器管理,只要spring容器存在,这个对象就一直存在
如果对象是多例的,这个对象在使用时才会被创建,并且不会被spring容器管理(自生自灭eg:被垃圾回收机制回收)
④判断一个类是否单例还是多例
类中是否有属性,没有就是单例的
类中有属性,如果是不变的,就是单例的
eg:DAO不变的(单例) 。Service(dao属性)不变的–单例。 Controller(看是用那个spring–单例;struts–通过属性传值是多例)
四.IOC(控制反转–只存在与一个对象)—DI(两个对象之间有关系比如service和dao—依赖注入
依赖注入 ①原始:new;②spring的DI:①把属性生成一个set方法(private studentDao studentdao)
②在下加上<property name=“studentDao”(name与set方法中的参数一致) ref=“studentDao”(ref与bean的id一致)>))
来源:CSDN
作者:qq_43234517
链接:https://blog.csdn.net/qq_43234517/article/details/103773025