1.1概述

1.1.1 Spring是什么
Spring一个轻量级的框架,以IOC(控制反转)和AOP(面向切面编程)为内核,Spring在表现层提供了Spring MVC的框架整和功能,在业务逻辑层可以管理事务,记录日志,在持久层可以整合Mybatics。虽然Spring可以贯穿表现层,业务逻辑层和持久层,但绝非取代已有的框架,而是高度和开放与他们整合
1.1.2 有什么好处

  • 方便解耦,简化开发:对象的创建都交给Spring,降低组件之间的耦合度。
  • 非侵入式设计:spring中,业务类不需要继承框架的类,将来抛弃spring也比较方便,也就是代码对框架依赖最小化。
  • 支持AOP,允许一些通用的任务,比如安全,事务,日志进行集中处理,提高了程序的复用性。
  • 声明式事务管理
  • 方便测试
  • 方便集成框架

1.1.3 体系结构.

Spring框架采用分层架构,主要分为核心容器,数据集成/访问,web,和其他模块。

Spring的基本应用_spring


1.1.4 目录结构

通过下载并解压框架包,其中包括doc目录下的api开发文档和开发规范,libs目录下的开发需要的jar包和源码,以及schema文件夹中的约束文件。在libs目录中,有四个基础包分别是,core:包含核心工具类,beans:包含配置文件,管理和创建bean操作的类,context:提供ioc 功能上的扩展服务,expression:表达式语言

1.2核心容器

1.2.1 BeanFactory:管理bean 的工厂,负责初始化bean,调用生命周期方法。

BeanFactory beanfactory = new XmlBeanFactory(new FileSystemResource("F:/applicationContext.xml");

1.2.2 ApplicationContext
是BeanFactory的子接口,添加了国际化,事件传播的支持
实例化方法有两个

//方法一
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String config)
//这种方法Spring默认到类路径查找
//方法二
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String config)
//默认用绝对路径

在使用Spring框架时,通常在Java项目中使用ClassPathXmlApplicationContext来实例化,而在web 项目中,实例化工作交给web服务器完成,基于ContextLoaderListener实现。
BeanFactory和ApplicationContext的区别在于,如果bean中有一个属性没有注入,若使用第一种方式,在使用getbean会抛出异常,第二种方法,在初始化时会自检。

1.3入门程序

创建项目,并引入jar包。

Spring的基本应用_Spring的基本应用_02


编写测试程序,创建com.itheima.ioc包,创建一个接口,并编写实现类。

//接口
package com.itheima.ioc;
public interface UserDao {
	public void say();

}
//实现类
package com.itheima.ioc;
public class UserDaoImpl implements UserDao{
	public void say(){
		System.out.println("i am saying vacation");
	}
}

创建配置文件,在配置文件中创建bean实例。

<?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">

    <bean id="userDao" class="com.itheima.ioc.UserDaoImpl">
    </bean>
</beans>

创建测试类

package com.itheima.ioc;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIoc {

	public static void main(String[] args) {
		ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao)applicationconrtext.getBean("userDao");
		userDao.say();
		// TODO Auto-generated method stub

	}

}

运行

Spring的基本应用_spring_03

1.4依赖注入

依赖注入(DI)和控制反转(Ioc)
传统上当我们在一个类需要调用另一个类对象时,往往通过new 一个新对象的方式,这种方式增加了调用者和被调用者之间的耦合度。
现在使用了Spring框架之后,对象的实例化交由容器来完成,控制权便由调用者的程序代码转移至容器
从容器角度来看,容器负责将被依赖对象赋值给调用者的成员变量,为调用者注入了依赖实例。
通过setter方法,实现依赖注入
再定义一个接口和一个实现类,在实现类中声明上一次定义的类,调用其中的say方法。

package com.itheima.ioc;
public interface UserService {
	public void say();
}
package com.itheima.ioc;

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void say(){
		this.userDao.say();
		System.out.println("i am saying second");
		
	}

}

关键在于配置文件的编写

<bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean>
    <bean id="userService" class="com.itheima.ioc.UserServiceImpl">
    	<property name="userDao" ref="userDao"></property>
    </bean>

编写测试

public static void main(String[] args) {
		ApplicationContext applicationconrtext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService  userService = (UserService)applicationconrtext.getBean("userService");
		userService.say();
		// TODO Auto-generated method stub


	}

运行

Spring的基本应用_配置文件_04