初始Spring-IOC
控制反转(IOC):是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI只是IOC的另一种中说法。没有IOC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方。所谓的控制反转就是:后的依赖对象的方式发生了改变。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
控制反转是一中通过描述(XML或注解)并ton过第三种去产生或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法就是依赖注入(有参构造注入和set方法注入)
首先给出一个dao层的接口:UserDao
package com.zkw.dao;
public interface UserDao {
void getUser();
}
然后实现dao层的接口:UserDaoImpl
package com.zkw.dao;
public class UserDaoImpl implements UserDao {
public void getUser() {
System.out.println("默认获取用户数据");
}
}
给出service层的接口:UserService
package com.zkw.service;
public interface UserService {
void getUser();
}
实现service层的接口:UserServiceImpl
package com.zkw.service;
import com.zkw.dao.UserDao;
import com.zkw.dao.UserDaoImpl;
public class UserServiceImpl implements UserService {
UserDao userDao =new UserDaoImpl();
public void getUser() {
userDao.getUser();
}
}
测试代码:MyTest
import com.zkw.service.UserService;
import com.zkw.service.UserServiceImpl2;
public class MyTest {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
userService.getUser();
}
}
结果展示,如下
现在我们有一个需求,需要不同的用户去实现接口。比如是:SQLServiceI
package com.zkw.dao;
public class UserDaoSQLServiceImpl implements UserDao {
public void getUser() {
System.out.println("SQLService获取用户数据");
}
}
此时我们就需要去修改Service层的代码,UserServiceImpl
package com.zkw.service;
import com.zkw.dao.UserDao;
import com.zkw.dao.UserDaoSQLServiceImpl;
public class UserServiceImpl implements UserService {
UserDao userDao =new UserDaoSQLServiceImpl();
public void getUser() {
userDao.getUser();
}
}
结果如下
虽然这样我们也可以得到我们所需要的答案,但是这个样每次来一个用户都需要程序猿去改Service层的代码,比较繁琐。所以就有了面向切面编程的IOC思想,用一个set注入或者用有参构造注入
此时的UserServiceImpl
package com.zkw.service;
import com.zkw.dao.UserDao;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
测试代码
import com.zkw.dao.UserDaoImpl;
import com.zkw.dao.UserDaoSQLServiceImpl;
import com.zkw.service.UserServiceImpl;
public class MyTest {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl();
userService.setUserDao(new UserDaoSQLServiceImpl());
userService.getUser();
userService.setUserDao(new UserDaoImpl());
userService.getUser();
}
}
结果如下