框架入门-spring01

目前的主流框架:

    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<String> list;
	private Map<String, String> map;
	private Properties properties;

	public void setArr(String[] arr) {
		this.arr = arr;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public void setMap(Map<String, String> 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);
	}
}
<!-- 注入复杂的数据类型 -->
	<bean id="person" class="spring.property.Person">
		<!-- arr -->
		<property name="arr">
			<list>
				<value>小王arr</value>
				<value>小王arr</value>
				<value>小王arr</value>
			</list>
		</property>
		
		<!-- list -->
		<property name="list">
			<list>
				<value>小王list</value>
				<value>小王list</value>
				<value>小王list</value>
			</list>
		</property>
		
		<!-- map -->
		<property name="map">
		    <map>
		        <entry key="key0" value="value0"></entry>
		        <entry key="" value=""></entry>
		        <entry key="" value=""></entry>
		    </map>
		</property>
		
		<!-- properties -->
		<property name="properties">
		    <props>
		        <prop key="key1">值1</prop>
		    </props>
		</property>
	</bean>

猜你喜欢

转载自blog.csdn.net/qq_38551043/article/details/81241257