1.入门程序演示Spring框架的使用
(1)新建web项目,名称为chapter01,然后将Spring的四个基础包以及commons-logging的jar包复制到lib目录中,并发布到类路径下,如图所示。
(2)在src目录下,创建一个包,包名随意,我起作edu.javaee.spring,并在包中创建接口UserDao,然后在接口中定义一个say()方法。
package edu.javaee.spring;
public interface UserDao {
public void say();
}
(3)在包下,创建UserDao接口的实现类UserDaoImpl,该类需要实现 接口中的say()方法,并在方法中编写一条输出语句,代码如下。
package edu.javaee.spring;
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say Hello World");
}
}
(4)在src目录下,创建Spring的配置文件applicationContext.xml(该文件名一般通用规定成这个),并在配置文件中创建一个id为userDao的Bean,配置图片如下
该代码片内容可在spring-framework-4.3.6.RELEASE\docs\spring-framework-reference\html文件夹下的index.html文件中寻找。详见目录7.2.1. Configuration metadata
bean的功能可理解为将指定配置给spring,让spring创建其对象的实例。
(5)最后在包下创建测试类TestIoC,并在类中写入main()方法,在main()方法中,需要初始化Spring容器,并加载配置文件,然后通过Spring容器获取userDao实例(即java对象),最后调用示例中的say()方法,代码如下。
package edu.javaee.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoC {
public static void main(String[] args) {
//1.初始化Spring容器,创建配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过容器获取userDao实例
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
//3.调用实例方法
userDao.say();
}
}
执行程序后,控制台输出say方法的功能。
2. Spring的优点是什么?
Sping具有简单、可测试和松耦合等特点。
(1)是一种非侵入式框架,它可以使应用程序代码对框架的依赖最小化;
(2)方便解耦/简化开发;
(3)支持AOP;
(4)支持声明式事务处理;
(5)方方便程序的测试;
(6)方便集成各种优秀框架;
(7)降级Java RR API 的使用难度。
3.Spring的IoC和DI的概念理解
IoC(控制反转):
在使用 Spring 框架之后,对象的实例不再由调用者来创建,而是由 Spring 容器来创建,Spring 容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权
由应用代码转移到了 Spring 容器,控制权发生了反转,这就是 Spring 的控制反转。
它是一种面向对象编程中的一种设计原则,用来降低计算机代码之间的耦合度。其基本思想是,借助于“第三方”实现具有依赖关系的对象之间的解耦。
DI( 依赖注入):
从Spring 容器的角度来看, Spring 容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是 Spring 的依赖注入。
它是将实例变量传入到一个对象中去,依赖是通过外接注入的方式来实现的。这就实现了解耦。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。