Spring_IOC思想
IOC理论
因为用户的需求可能会影响原来写好的代码,所以我们可以通过set方法,实现控制反转,将控制权交给用户。
原来的程序
public interface UserDao {
void getUser();
}
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("1111");
}
}
public interface UserService {
void getUser();
}
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserServiceImpl() {
this.userDao=new UserDaoImpl();
}
@Override
public void getUser() {
userDao.getUser();
}
}
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
}
若此时,用户需要在添加功能
public class UserDaoOracleImpl implements UserDao{
@Override
public void getUser() {
System.out.println("oracle1111");
}
}
public class UserDaoMysqlImpl implements UserDao{
@Override
public void getUser() {
System.out.println("mysql1111");
}
}
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
UserDaoMysqlImpl userDaoMysql = new UserDaoMysqlImpl();
userDaoMysql.getUser();
UserDaoOracleImpl userDaoOracle = new UserDaoOracleImpl();
userDaoOracle.getUser();
}
因为用户新增功能,导致程序员不得不修改原来的代码,但是如果工程架构复杂,就会很有可能出错。控制权一直都在程序员手中
再次理解IOC思路,我们可以使用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 test(){
UserServiceImpl userService =new UserServiceImpl();
userService.setUserDao(new UserDaoImpl());
userService.getUser();
}
此时,主动权就交给用户,用户想要实现UserDaoImpl,就通过set方法自己注入new UserDaoImpl(),想要实现UserDaoMysqlImpl,就通过set方法注入new UserDaoMysqlImpl()

浙公网安备 33010602011771号