官网 : http://spring.io/
官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/
GitHub : https://github.com/spring-projects
Spring01:概述及IOC理论推导
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)
IOC基础
新建项目
User
@Data
public class User {
private int id;
private String name;
private String pwd;
}
UserDao
public interface UserDao {
public void getUser();
}
UserdaoImpl
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("获取用户数据");
}
}
UserService
public interface UserService {
public void getUser();
}
UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaoImpl();
@Override
public void getUser(){
userDao.getUser();
}
}
测试
public class MyTest {
@Test
public void testGetUser(){
UserServiceImpl service = new UserServiceImpl();
service.getUser();
}
}
扩展功能
添加实现类UserDaoMySqlImpl
public class UserDaoMySqlImpl implements UserDao {
@Override
public void getUser() {
System.out.println("MySQL获取用户数据");
}
}
UserServiceImpl中
public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaoMySqlImpl();
@Override
public void getUser(){
userDao.getUser();
}
}
再添加一个UserDaoOracleImpl
public class UserDaoOracleImpl implements UserDao {
@Override
public void getUser() {
System.out.println("Oracle获取用户数据");
}
}
修改UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao=new UserDaoOracleImpl();
@Override
public void getUser(){
userDao.getUser();
}
}
问题:每一次都要修改
解决:使用set()方法实现
public class UserServiceImpl implements UserService{
private UserDao userDao;
//set实现
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
@Override
public void getUser(){
userDao.getUser();
}
}
测试
@Test
public void testGetUser() {
UserServiceImpl service = new UserServiceImpl();
service.setUserDao(new UserDaoMySqlImpl());
service.getUser();
//使用Oracle实现
service.setUserDao(new UserDaoOracleImpl());
service.getUser();
}
由调用者自行创建对象