1、例题
(1)UserDao 接口类:
package edu.javaee.spring;
public interface UserDao {
public void say();
}
(2)UserDaoImpl接口实现类:
package edu.javaee.spring;
public class UserDaoImpl implements UserDao {
@Override
public void say() {
System.out.println(“userDao say hello World!”);
}
}
(3)applicationContext配置文件:
<?xml version="1.0" encoding="UTF-8"?>
(4)TestIoc 测试类:
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();
}
}
2、spring框架的优点是什么?
(1)非侵入式设计:不要求实现接口
(2)方便解耦、简化开发:通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。 有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
(3)支持AOP:通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
(4)支持声明式事务处理:通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
(5)方便程序测试:可以用非容器依赖的编程方式进行几乎所有的测试工作。
(6)方便集成各种优秀框架:Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
(7)降低Java EE API的使用难度:Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
3、什么是IoC(控制反转)和DI(依赖注入)?
ioC:在使用spring框架之后,对象的实例不在由调用者来创建,而是由spring容器来创建,spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了spring容器,控制权发生了反转,这就是控制反转。
DI:从spring容器的角度来看,spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是spring的依赖注入。