在ecplise中创建Web项目,发布并运行
目录
理论连接
项目整体框架
项目准备
1、Spring下载
tuomasi.lanzouy.com/iD2dd00kjk2…
密码:Spring
2、SSM全套Jar包
密码:jars
项目启动
1、创建Web项目
2、将Jar包拷贝到 lib 目录下
3、在 src 目录下新建包
4、创建接口 UserDao
5、写一个简单的say方法
6、创建实现类
7、打印 hello World
8、src 目录下创建xml
9、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-4.3.xsd"> <!-- 将指定类配置给Spring,让Spring创建其对象的实例 --> <bean id="userDao" class="com.Example.ioc.UserDaoImpl"></bean> </bean> </beans>10、创建测试类
11、通过容器获取并调用实例方法
12、运行程序
注:say方法被调用
Spring IOC: 在main方法中没有通过new关键字来创建UserDao接口的实现类对象,而是通过Spring容器来获取的实现类对象,这就是Spring IOC容器的工作机制
依赖注入
控制反转: 在使用Spring框架后,对象的实例不再由调用者创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转。
依赖注入: 从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这样相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。
1、创建接口UserService
public interface UserService {
public void say();
}
2、创建实现类UserServicelmpl
public class UserServiceImpl implements UserService {
// 声明属性
private UserDao userDao;
// 添加userDao属性的setter方法,用于实现依赖注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void say() {
// 调用userDao中的say()方法,执行输出语句
this.userDao.say();
System.out.println("userService say hell world!");
}
}
3、添加 xml 依赖
<!-- 添加一个id为userService的实例 -->
<bean id="userService" class="com.Example.ioc.UserServiceImpl">
<!-- 将id为userDao的Bean实例注入到userService -->
<property name="userDao" ref="userDao"></property>
</bean>
注:<property>是<bean>元素的子元素,它用于调用Bean实例中的setUserDao()方法完成属性赋值,从而实现依赖注入。
name属性表示Bean实例中的相应属性名,ref属性用于指定其属性值。
4、创建测试类进行测试
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args) {
// 1.初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.通过容器获取UserService实例
UserService userService = (UserService) applicationContext.getBean("userService");
// 3.调用实例中的say()方法
userService.say();
}
}
5、运行程序
注:使用Spring容器通过UserService实现类中的say()方法,调用了UserDao实现类中的say()方法,并输出了结果。这就是Spring容器属性setter注入的方式,也是实际开发中最为常用的一种方式。
Spring与IOC总结
控制反转(IOC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代 码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对 象控制权的转移,从程序代码本身反转到了外部容器。
IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种: 依赖注入和依赖查找。依赖注入方式应用更为广泛。
1、依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代 码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。
2、依赖注入:Dependency Injection,DI,程序代码不做定位查询,这些工作由容器自行完成。
依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。
Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。
依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。