一、spring框架概述

spring解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

二、spring框架的优点

1、方便解耦,简化开发;2、支持面向切面编程(AOP);

3、支持声明式事务的处理,只需要通过配置对事务进行管理无需手动;4、方便程度测试。spring对Junit支持,可以通过注解测试spring程序;5、方便集成优秀框架;6、降低API的使用难度;

三、spring核心技术

(一)什么是IOC

IOC:控制反转,将对象创建的权利反转给spring的框架,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

1、IOC程序入门

第一步:创建maven仓库java工程

第二步:引入坐标①spring-context②commons-logging③log4j④junit

主要的4大jar包:

①Spring Beans:Spring IOC的基础实现,包含访问配置文件、创建和管理bean等,所有应用都用到。

②Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。

③Spring Core:Spring的核心工具包 ,其他包依赖此包

④spring-expression-3.1.0.RELEASE.jar

第三步:导入log4j文件

第四步:使用接口方式,创建业务层和持久层

第五步:并在测试类中调用(使用创建对象的方式)

接下来使用新方式IOC:

1.1首先创建applicatinContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--IOC管理bean-->
<bean id="userService" class="demo.serviceImpl" />

</beans>

1.2编写测试类

步骤:①创建spring工厂;②从容器中获取;③调用方法

@Test
public void run(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Service service = (Service) ac.getBean("userService");
service.save();

2、IOC技术总结

ApplicationContext接口,工厂的接口,使用该接口可以获取到具体的Bean对象。该接口下有两个具体的实现类。

ClassPathXmlApplicationContext(加载类路径下的spring配置文件)

FileSystemXmlAppLicationContext(加载本地磁盘下的spring配置文件)

3、Spring框架的Bean管理的配置文件方式

id属性,Bean起个名字,在约束中采用ID的约束,唯一,取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符。

class属性,Bean对象的全路径。

scope属性,scope属性代表Bean的作用范围。

singleton单例(默认值),最常用的方式。

prototype多例

request应用在Web项目中,每次HTTP请求都会创建一个新的Bean

session应用在Web项目中,同一个HTTP Session 共享一个Bean

Bean对象的创建和销毁的两个属性配置

说明:Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法

init-method,当bean被载入到容器的时候调用init-method属性指定的方法

destroy-method,当bean从容器中删除的时候调用destroy-method属性指定的方法

4、实例化Bean对象的三种方式

默认是无参数的构造方法(默认方式,基本上使用)

<bean id="userService" class="demo.serviceImpl" />

静态工厂实例化方式

实例工厂实例化方式

(二)什么是DI依赖注入

DI:依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中

1、属性的set方法注入值

编写属性,提供该属性对应的set方法,编写配置文件完成属性值的注入

// 编写成员属性,一定需要提供该属性的set方法
private OrderDao orderDao;
// 一定需要提供该属性的set方法,IOC容器底层就通过属性的set方法方式注入值
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
// 消息
private String msg;
// 年龄
private int age;
public void setMsg(String msg) {
this.msg = msg;
}
public void setAge(int age) {
this.age = age;
}

配置文件中

<bean id="os" class="cn.tx.service.OrderServiceImpl">
<property name="orderDao" ref="od" />
<property name="msg" value="你好" />
<property name="age" value="30" />
</bean>

2、属性构造方法注入值

对于类成员变量,构造函数注入。

public class Car {

// 名称
private String cname;
// 金额
private Double money;

public Car(String cname, Double money) {
this.cname = cname;
this.money = money;
}

@Override
public String toString() {
return "Car{" +
"cname='" + cname + '\'' +
", money=" + money +
'}';
}}

配置文件

<bean id="car" class="cn.tx.demo2.Car">
<constructor-arg name="cname" value="大奔" />
<constructor-arg name="money" value="400000" />
</bean>

3、数组,集合(list,set,map)Properties等的注入

// 数组
private String [] strs;
public void setStrs(String[] strs) {
this.strs = strs;
}

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

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

private Properties properties;
public void setProperties(Properties properties) {
this.properties = properties;
}

配置文件

<!--给集合属性注入值-->
<bean id="collectionBean" class="cn.tx.demo3.CollectionBean">
<property name="strs">
<array>
<value>美美</value>
<value>小凤</value>
</array>
</property>
<property name="list">
<list>
<value>亮亮</value>
<value>建云</value>
</list>
</property>
<property name="map">
<map>
<entry key="aaa" value="聪聪"/>
<entry key="bbb" value="淞铭"/>
</map>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123456</prop>
</props>
</property>
</bean>

4、多配置文件的加载方式

在src的目录下又多创建了一个配置文件,现在是两个核心的配置文件,那么加载这两个配置文件的方式有两种!

①​​<import resource="applicationContext2.xml"/>​

②工厂创建的时候直接加载多个配置文件