文章目录
- 传统JavaWeb开发的困惑
- IoC、DI和Aop思想提出
- Spring框架的诞生
- Spring 框架概述
- Spring 框架历史
- Spring Framework技术栈图示
- BeanFactory 快速入门
- DI 入门案例
- ApplicationContext快速入门
- BeanFactory 和 ApplicationContext的关系
- BeanFactory 的继承体系
- ApplicationContext 的继承体系
- 基于xml的Spring应用
- SpringBean 的配置详解
- 基于注解的Spring应用
传统JavaWeb开发的困惑
IoC、DI和Aop思想提出
Spring框架的诞生
Spring 框架概述
Spring 框架历史
Spring Framework技术栈图示
BeanFactory 快速入门
-
导入jar包
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.7</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
-
定义UserService、UserDao接口及其各自的实现类
package com.xxxx.lln.service; /** * UserService接口 */ public interface UserService { public void print(); } package com.xxxx.lln.service.serviceImpl; import com.xxxx.lln.dao.UserDao; import com.xxxx.lln.dao.daoImpl.UserDaoImpl; import com.xxxx.lln.service.UserService; /** * UserService接口实现类 */ public class UserServiceImpl implements UserService { private UserDao userDao = new UserDaoImpl(); @Override public void print() { System.out.println("userService..."); userDao.print(); } }
package com.xxxx.lln.dao; /** * UserDao接口 */ public interface UserDao { public void print(); } package com.xxxx.lln.dao.daoImpl; import com.xxxx.lln.dao.UserDao; /** * UserDao接口实现类 */ public class UserDaoImpl implements UserDao { @Override public void print() { System.out.println("userDao..."); } }
-
配置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.xsd"> <bean id="userService" class="com.xxxx.lln.service.serviceImpl.UserServiceImpl"></bean> <bean id="userDao" class="com.xxxx.lln.dao.daoImpl.UserDaoImpl"></bean> </beans>
-
创建BeanFactoryTest,加载配置文件,获取UserService
package com.xxxx.lln.test; import com.xxxx.lln.dao.UserDao; import com.xxxx.lln.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; public class BeanFactoryTest { @Test public void test1() { //创建工厂对象 DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); //创建一个读取器(xml文件) XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory); //读取器配置文件给工厂 reader.loadBeanDefinitions("bean1.xml"); //根据id获取Bean实例对象 UserService userService = (UserService) beanFactory.getBean("userService"); System.out.println(userService); userService.print(); UserDao userDao = (UserDao) beanFactory.getBean("userDao"); System.out.println(userDao); userDao.print(); } }
DI 入门案例
Spring的IOC入门案例已经完成,但是在UserServiceImpl的类中依然存在UserDaoImpl对象的new操作,它们之间的耦合度还是比较高,这块该如何解决,就需要用到下面的DI:依赖注入
。
-
删除业务层中使用new的方式创建的dao对象,提供userDao的setter方法
package com.xxxx.lln.service.serviceImpl; import com.xxxx.lln.dao.UserDao; import com.xxxx.lln.dao.daoImpl.UserDaoImpl; import com.xxxx.lln.service.UserService; import com.xxxx.lln.test.BeanFactoryTest; /** * UserService接口实现类 */ public class UserServiceImpl implements UserService { //private UserDao userDao = new UserDaoImpl(); private UserDao userDao; public void setUserDao(UserDao userDao){ System.out.println("BeanFactoryTest调用setUserDao该方法"+userDao); this.userDao = userDao; } @Override public void print() { System.out.println("userService..."); userDao.print(); } }
-
在配置文件中添加依赖注入的配置
<bean id="userService" class="com.xxxx.lln.service.serviceImpl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="com.xxxx.lln.dao.daoImpl.UserDaoImpl"></bean>
-
运行程序调用方法
ApplicationContext快速入门
package com.xxxx.lln.test;
import com.xxxx.lln.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextTest {
@Test
public void test1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean1.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
System.out.println(userService);
}
}
BeanFactory 和 ApplicationContext的关系
BeanFactory 的继承体系
ApplicationContext 的继承体系
基于xml的Spring应用
SpringBean 的配置详解