Spring学习 一
前言
之前都是需要用到spring的时候,去查询怎么使用,没有去学习其中的原理,所以需要花时间讲之前没学过的知识,重新学习一边。
一、Spring是什么?
Spring就是一个轻量级开源免费,非入侵的控制反转(IOC)和面向切面变成(AOP)框架。
二、控制反转(IOC)是什么?
控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法。没有IOC的程序中,我们使用面向对象变成,对象的创建与对象间的依赖关系完全写死在程序中,由程序自己控制,而控制反转则是将对象的创建转移给调用方。简单来说就是想要使用哪个对象将由使用者自己创建。下面用图来描述。
IOC是Spring框架的核心内容,通常使用XML配置与注解来实现。
代码举例
项目结构如下
pox.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springIoc</groupId>
<artifactId>zjj</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
</project>
UserDao
package dao;
public interface UserDao {
public void getUser();
}
UserMysqlDaoImpl
package dao;
public class UserMysqlDaoImpl implements UserDao{
public void getUser() {
System.out.println("mysql的用户信息");
}
}
UserOracleDaoImpl
package dao;
public class UserOracleDaoImpl implements UserDao{
public void getUser() {
System.out.println("oracle的用户信息");
}
}
UserSqlserverDaoImpl
package dao;
public class UserSqlserverDaoImpl implements UserDao{
public void getUser() {
System.out.println("sqlserver的用户信息");
}
}
UserService
package service;
public interface UserService {
public void getUser();
}
UserServiceImpl
package service;
import dao.UserDao;
import dao.UserMysqlDaoImpl;
import dao.UserOracleDaoImpl;
import dao.UserSqlserverDaoImpl;
public class UserServiceImpl implements UserService{
public UserDao userDao;
//传统模式 每增加一个都需要重新开发一个方法
public void getMysqlUser(){
new UserMysqlDaoImpl().getUser();
}
public void getOracleUser(){
new UserOracleDaoImpl().getUser();
}
public void getSqlserverUser(){
new UserSqlserverDaoImpl().getUser();
}
//IOC模式
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void getUser(){
userDao.getUser();
}
}
MyTest
import dao.UserDao;
import dao.UserMysqlDaoImpl;
import dao.UserOracleDaoImpl;
import dao.UserSqlserverDaoImpl;
import service.UserServiceImpl;
public class myTest {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
//传统的代码
userService.getMysqlUser();
userService.getOracleUser();
userService.getSqlserverUser();
//IOC形式的代码
userService.setUserDao(new UserMysqlDaoImpl());
userService.getUser();
userService.setUserDao(new UserOracleDaoImpl());
userService.getUser();
userService.setUserDao(new UserSqlserverDaoImpl());
userService.getUser();
}
}
结果:
总结
这次简单说一下Spring中的核心概念IOC,下次再讲述AOP。