spring入门篇

spring入门篇

一、Spring的概述

1.1、什么是spring

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

  • 目的:解决企业应用开发的复杂性
  • 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
  • 范围:任何Java应用

它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2、spring的优点

在这里插入图片描述

1.3、spring提供一站式框架

  • Spring:SE/EE开发的一站式框架
  • 一站式框架:有EE开发的每一层解决方案。
    • WEB层 :SpringMVC
    • Service层 :Spring的Bean管理,Spring声明式事务
    • DAO层 :Spring的Jdbc模板,Spring的ORM模块
      在这里插入图片描述

1.4、spring包下载

官网:http://spring.io/
在这里插入图片描述

  • docs :Spring的开发规范和API
  • libs :Spring的开发的jar和源码
  • schema :Spring的配置文件的约束

二、spring-Ioc

2.1、什么是spring的控制反转

控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

  • IOC:控制反转,将对象的创建权反转给了Spring。
    • DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

2.2、创建一个简单的Demo

2.2.1、引入所需jar包

在这里插入图片描述

2.2.2、创建接口和类
/**
 * 用户管理DAO层接口
 *
 */
public interface UserDAO {
	public void save();
}

/**
 * 用户管理DAO层实现类
 *
 */
public class UserDAOImpl implements UserDAO {
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void save() {
		System.out.println("UserDAOImpl执行了..."+name);
	}

}

2.2.3、将实现类交给Spring管理
	<!-- Spring的入门的配置==================== -->
 	<bean name="userDAO" class="spring.demo1.UserDAOImpl" >
 		<property name="name" value="李东"/>
 	</bean>
2.2.4、编写测试类
@Test
	/**
	 * Spring的方式的调用
	 */
	public void demo2(){
		// 创建Spring的工厂
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDAO userDAO = (UserDAOImpl) applicationContext.getBean("userDAO");
		userDAO.save();
	}

三、Spring的工厂类

3.1、Spring工厂类的结构图

在这里插入图片描述

  • BeanFactory:调用getBean的时候,才会生成类的实例(老版本)
  • ApplicationContext :加载配置文件的时候,就会将Spring管理的类都实例化,它又2个实现类
    • ClassPathXmlApplicationContext :加载类路径下的配置文件
    • FileSystemXmlApplicationContext :加载文件系统下的配置文件

四、Spring的bean管理

4.1、bean标签的基本配置

  • id :在容器中查找Bean(对象)的id(唯一、且不能以/开头)
  • class :bean(对象)的完整类名
  • name :在容器中查找Bean(对象)的名字(唯一、允许以/开头、允许多个值,多个值之间用逗号或空格隔开)

4.2、bean标签的生命周期

  • init-method :Bean被初始化的时候执行的方法
  • destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)

4.3、Bean的作用范围的配置(重点)

  • scope:Bean的作用范围
    • singleton :默认的,Spring会采用单例模式创建这个对象。
    • prototype :多例模式。(Struts2和Spring整合一定会用到)
    • request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
    • session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
    • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

4.4、Spring的Bean的实例化方式(XML方式)

4.4.1、无参构造方法的方式(默认)
  • 配置文件
<!-- 无参数构造方法 -->
 	<bean id="bean1" class="spring.demo3.Bean1"></bean>
  • 编写类
/**
 * 无参数构造方法方式
 *
 */
public class Bean1 {

	public Bean1() {
		System.out.println("Bean1的无参数的构造方法执行了...");
	}

}

4.4.2、静态工厂实例化的方式
  • 配置文件
	<!-- 静态工厂实例化 -->
 	<bean id="bean2" class="spring.demo3.Bean2Factory" factory-method="createBean2"/>
  • 编写类

 </**
 * Bean2的静态工厂
 *
 */
public class Bean2Factory {

	public static Bean2 createBean2(){
		System.out.println("Bean2Factory中方法执行了...");
		return new Bean2();
	}
}`
4.4.3、静态工厂实例化的方式
  • 配置文件
	<!-- 实例工厂实例化 -->
 	<bean id="bean3Factory" class="spring.demo3.Bean3Factory"></bean>
 	<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3"></bean>
  • 编写类

 /**
 * Bean3的实例工厂
 *
 */
public class Bean3Factory {

	public Bean3 createBean3(){
		System.out.println("Bean3的实例工厂执行了...");
		return new Bean3();
	}
}

/**
 * 实例工厂实例化的方式
 *
 */
public class Bean3 {

}

4.5、Spring的属性注入

4.5.1、构造方法的方式的属性注入
  • 配置文件
<!-- 构造方法的方式 -->
<bean id="car" class="spring.demo4.Car">
	<constructor-arg name="name" value="宝马"/>
	<constructor-arg name="price" value="800000"/>
</bean>
  • 编写类
public class Car {
	private String name;
	private Double price;
	
	public Car(String name, Double price) {
		super();
		this.name = name;
		this.price = price;
	}

	@Override
	public String toString() {
		return "Car [name=" + name + ", price=" + price + "]";
	}
	
}
4.5.2、Set方法的方式的属性注入
4.5.2.1、Set方法的属性注入
  • 配置文件
<!-- set方法的方式 -->
<bean id="car2" class="spring.demo4.Car2">
	<property name="name" value="奔驰"/>
	<property name="price" value="1000000"/>
</bean>
  • 编写类
/**
 * set方法的属性注入
 *
 */
public class Car2 {
	private String name;
	private Double price;
	public void setName(String name) {
		this.name = name;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car2 [name=" + name + ", price=" + price + "]";
	}
}
4.5.2.2、Set方法设置对象类型的属性
  • 配置文件
<!-- set方法注入对象类型的属性 -->
 <bean id="employee" class="spring.demo4.Employee">
	 <!--value:设置普通类型的值,ref:设置其他的类的id或name-->
	<property name="name" value="王五"/>
	<property name="car2" ref="car2"/>
</bean>
  • 编写类
/**
 * set方法的属性注入
 */
public class Employee {
	private String name;
	private Car2 car2;
	public void setName(String name) {
		this.name = name;
	}
	public void setCar2(Car2 car2) {
		this.car2 = car2;
	}
	@Override
	public String toString() {
		return "Employee [name=" + name + ", car2=" + car2 + "]";
	}
}

4.5.3、P名称空间的属性注入(Spring2.5以后)

<!-- 改为p名称空间的方式 -->
	<bean id="car2" class="spring.demo4.Car2" p:name="奇瑞QQ" p:price="30000"></bean>
	<bean id="employee" class="spring.demo4.Employee" p:name="王东" p:car2-ref="car2"></bean>

4.5.4、SpEL的属性注入(Spring3.0以后)

<!-- SpEL的属性注入 -->
<bean id="carInfo" class="spring.demo4.CarInfo">
</bean>

<bean id="car2" class="spring.demo4.Car2">
	<property name="name" value="#{carInfo.name}"></property>
	<property name="price" value="#{carInfo.calculatorPrice()}"></property>
</bean>

<bean id="employee" class="spring.demo4.Employee">
	<property name="name" value="#{'赵洪'}"></property>
	<property name="car2" value="#{car2}"></property>
</bean>

4.5.5、集合类型属性注入(了解)

  • 配置文件
<!-- Spring的集合属性的注入============================ -->
	<!-- 注入数组类型 -->
	<bean id="collectionBean" class="spring.demo5.CollectionBean">
		<!-- 数组类型 -->
		<property name="arrs">
			<list>
				<value>王东</value>
				<value>赵洪</value>
				<value>李冠希</value>
			</list>
		</property>
		
		<!-- 注入list集合 -->
		<property name="list">
			<list>
				<value>李兵</value>
				<value>赵如何</value>
				<value>邓凤</value>
			</list>
		</property>
		
		<!-- 注入set集合 -->
		<property name="set">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>
		
		<!-- 注入Map集合 -->
		<property name="map">
		
			<map>
				<entry key="aaa" value="111"/>
				<entry key="bbb" value="222"/>
				<entry key="ccc" value="333"/>
			</map>
		</property>
	</bean>
  • 编写类

/**
 * 集合属性的注入:
 *
 */
public class CollectionBean {
	private String[] arrs;
	private List<String> list;
	private Set<String> set;
	private Map<String,String> map;

	public void setArrs(String[] arrs) {
		this.arrs = arrs;
	}

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

	public void setSet(Set<String> set) {
		this.set = set;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	@Override
	public String toString() {
		return "CollectionBean [arrs=" + Arrays.toString(arrs) + ", list=" + list + ", set=" + set + ", map=" + map
				+ "]";
	}
}

项目链接: spring入门篇.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值