第一章 Spring的基本应用
1.1 SPring概述
-
Spring的体系结构
-
Core Container(核心容器)
- 包括beans、core、context、context-support、SpEL
-
Data Access/Integration(数据访问/集成)
- 包括 jdbc、DRM、OXM、JMS、Transaction
-
Web
- 包括 WebSocket、Servlet、Web模块、Portlet模块
-
其他模块
- 包括 AOP模块、Aspect模块、Instrumentation模块、Messaging模块、Test模块
-
-
Spring的下载及目录结构
最重要的是导入下面的四个jar包以及一个第三方依赖包
-
第一个Spring程序
- 创建一个包com.itheima.ioc,创建接口类UserDao,接口中定义say()方法
package com.itheima.ioc; public interface UserDao { public void say(); }
-
在com.itheima.ioc包下,创建UserDao的实现类UserDaoImpl,用于实现say()方法
package com.itheima.ioc; public class UserDaoImpl implements UserDao { @Override public void say() { // TODO Auto-generated method stub System.out.println("hello world!"); } }
-
在src下创建spring的配置文件,applicationContext.xml文件,并在其中创建id为userDao的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"> <!-- 以上信息为配置信息、可在Spring-framework-reference文件夹下的index.html文件中找到 --> <bean id ="userDao" class="com.itheima.ioc.UserDaoImpl"/> </beans>
-
在com.itheima.ioc包,创建测试类TestIoC,并在其中实现main()方法
package com.itheima.ioc; 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.调用实例中的say()方法 userDao.say(); } }
-
运行成功
-
依赖注入
-
使用Spring后,对象实例由Spring容器来创建,Spring负责程序之间的关系。【控制反转】
-
Spring容器负责将被依赖的对象赋值给调用者的成员变量,相当于为调用者注入了它依赖的实例【依赖注入】
-
依赖注入的实现方法:
- 属性setter方法注入
- 构造方法注入
-
实例
-
在com.itheima.ioc包中创建接口UserService,并编写一个say()方法
package com.itheima.ioc; public interface UserService { public void say(); }
-
在com.itheima.ioc包中创建UserService的接口实现类UserServiceImpl,在类中声明userDao属性,并添setter方法
package com.itheima.ioc; public class UserServiceImpl implements UserService { // 1. 声明UserDao属性 private UserDao userDao; @Override // 3. 实现接口中的方法 public void say() { // TODO Auto-generated method stub // 4. 调用userDao中的say()方法,并执行输出语句 this.userDao.say(); // 输出say方法 System.out.println("userService say nihao!!!"); } // 2.添加UserDao属性的setter方法,用于实现依赖注入 public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
-
配置文件applicationContext.xml,在其中创建一个id为userService的Bean,用于实例化UserServiceImpl类的信息,将userDao的实例注入到userService中
<?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"> <!-- 添加id= userService 的 实例 --> <bean id ="userService" class = "com.itheima.ioc.UserServiceImpl"> <!-- 将id为userDao的Bean实例注入到userService实例中 --> <property name="userDao" ref = "userDao"/> <!--在这里我们实现了setter方法实现依赖注入,如果想实现构造方法注入,只需要把property 改为 constructor-arg 如下所示--> <!-- <constructor-arg name="userDao" ref = "userDao"/> 其他不变--> </bean> </beans>
-
在com.itheima.ioc包中,创建测试类
package com.itheima.ioc; 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(); } }
-
实现结果如下