目前的主流框架:
SSH:spring strust2 hibernate
SSM:spring springMVC MyBatis
三层架构:
表示层--jsp(springMVC/struts)
业务逻辑层--service(spring)
持久层--dao(MyBatis/Hibernate)
spring相关概念
轻量级/一站式/开源的框架,使用基本的JAVABean代替EJB(有缺点,重量级框架,依赖许多东西)
轻量级:依赖少
开源的框架
一站式(javaee的三层结构中,都提供了不同的技术):
springMVC--web层/spring--spring的IOC/MyBites--spring的JDBCTemplate
Spring核心模块:
Beans--数据对象 beans.jar
Core--框架的基本组成部分 Core.jar
Context--上下文 Context.jar
SpELl--EL和JSTL依赖expression.jar
spring核心:
IOC(控制反转:有一个类,在类中有一个方法[不是静态方法],调用类中的方法,创建类的对象,使用对象调用方法,创建对象过程,需要new出对象,IOC则不是new出来,而是通过spring通过配置文件,交给spring配置创建对象,spring是一站式框架,在javaee的三层结构中,都提供了不同的技术)
DI(依赖注入:在控制反转的基础之上,向类中注入属性的方式)
将创建对象的工作交给spring配置,IOC的两部分:
1.配置文件方式
2.注解方式
IOC的底层原理:
1.xml的配置文件
2.dom4j
3.工厂设计模式
4.反射
创建配置文件,配置创建类:
1.配置文件的名称和位置不是固定的,建议放在src下,官方建议applicationContext
2.引入约束schame, 可以在spring工具包中的spring-framework-4.3.14.RELEASE\docs\spring-framework-reference\html文件夹下的xsd-configuration.html文件数据从后往前找,找到beans文件
bean管理 bean创建对象的三种方式:
1.使用类的无参数构造器创建(重点) 使用无参数构造器通过反射创建对象
2.使用静态工厂创建 创建静态方法返回对象
3.使用实例工厂创建 创建普通方法,返回类的对象
bean标签常用属性:
id属性:名称,任意定义,不能有特殊符号
class属性:创建类的全路径
name属性:本身功能和id相同,名称,任意定义,可以有特殊符号
scope属性:范围,本身又存在几个属性:
singleton:默认值,单例的,默认创建每次都是同一个对象
prototype:多例的,默认创建每次都是同一个不同的对象
request:web项目中,spring创建一个bean对象,将对象传入到request域中(不常用)
session:web项目中,spring创建一个bean对象,将对象传入到session域中(不常用)
globalSession:web项目中,spring创建一个bean对象,将对象传入到globalSession(全局Session,单点登录)中(不常用)
DI依赖注入部分:
属性注入(创建对象的时候,向类里面的属性设置(注入值)的三种方式(spring支持两种):
1):使用setter方法注入(最多的)
<bean id="SetProperty" class="spring.property.SetProperty">
<property name="name" value="属性值">property>
bean>
2):有参数的构造
<bean id="ConstructerProperty" class="spring.property.ConstructerProperty">
<constructor-arg name="name" value="构造参数值">constructor-arg>
bean>
3):使用接口注入(spring不支持)
spring整合web项目原理:
加载核心配置文件的方式: ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext");
效率问题:这样加载配置文件每次都会创建一个对象,效率低下,解决的方案就是讲压力全部转给服务器,在服务器启动的时候就加载配置文件并创建对象
实现原理:ServletContext/Listener监听器,springmvc的ContextLoaderListener
具体使用:
1):在服务器启动的时候,为每一个项目创建一个ServletContext对象
2):在ServletContext对象创建的同时,使用监听器监听到ServletContext对象具体的创建时间
3):在监听到ServletContext对象创建的时候,加载spring配置文件,通过配置文件创建配置对象
4):将配置对象放到ServletContext域中(setAttribute方法)
5):获取配置文件对象的方式(getAttribuite)
数据注入
package spring.property;
import java.util.List;
import java.util.Map;
import java.util.Properties;
//注入复杂的数据类型
public class Person {
private String[] arr;
private List list;
private Map map;
private Properties properties;
public void setArr(String[] arr) {
this.arr = arr;
}
public void setList(List list) {
this.list = list;
}
public void setMap(Map map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public void say() {
System.out.println("arr:" + arr);
System.out.println("list:" + list);
System.out.println("map:" + map);
System.out.println("properties:" + properties);
}
}
小王arr
小王arr
小王arr
小王list
小王list
小王list
值1