ioc——inversion of control 控制反转是什么?
打开 Java 软件,新建 Java Project,Project nam e 为 01spring4_ioc1。
点击 Finish 后点确定。之后打开 src,Java Package内Name为cn.sxt.dao。
点击 Finish。在 Java Interface 里修改 Name 为 UserDao。
点击 Finish,然后进行代码编写。具体代码如下:
package cn.sxt.dao:
public interface UserDao{
public void getUser();
}
接口需要类,先建一个类包,方便扩展,解决耦合性。
package cn.sxt.dao. impl;
import cn. sxt . dao. UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void getUser ( ) {
System. out . print1n("获取用户数据") ;
}
}
再创建一个 cn.sxt.service:
package cn. sxt. service ;
public interface UserService {
public void getUser ( );
}
Service 里的实现是根据 dao。
package cn. sxt.service. impl;
import cn. sxt. dao.UserDao;
import cn. sxt .dao . impl . UserDaoImpl;
import cn. sxt. service.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl ( );
@Override
public void getUser ( ) {
userDao. getUser ( );
}
}
不同的 dao 实现不同。一旦改变了 dao,service 里面的 dao 调用也要改变,对象是自己创建的,当改变对象时原码也要重新去写。为了不去改变原码,可以通过以下方法:
public class Test {
public static void main(String[] args) {
UserServiceImpl userService = new UserServiceImpl ( );
userService. setUserDao( new UserDaoMySqlImpl ( ) );
userService. getUser ( ) ;
System. out. println(“--------------“);
userService . setUserDao(new UserDao0racleImpl ( ) );
userService. getUser ( );
}
}
以上是让程序自己去 new 一个对象的方法,除此之外还有把他放进配置文件,然后调用配置文件的方法,此时程序不用管代码,只提供一个接口。程序员不再关注对象本身的具体实现,更多的去关注业务。现在和 dao 的实现无关,直接依赖于对象的创建。
public class UserServiceImpl implements UserService{
private UserDao userDao=null ;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。