Java|Java 中的控制反转(IOC)详解

目录

  • IOC理论推导
  • Spring管理对象
  • Spring管理对象的简单例子
  • Bean无参构造类创建和有参构造类创建
  • Spring的一些配置
    • 别名
    • Bean的配置
    • import
  • 总结

    IOC理论推导 Java|Java 中的控制反转(IOC)详解
    文章图片


    Java|Java 中的控制反转(IOC)详解
    文章图片

    Dao层
    1.UserDao 接口

    2.UserDaoImpl 实现类
    Service层
    3.UserService 业务接口

    4.UserServiceImpl 业务实现类

    用户实际调用service层 不会动dao层!
    Dao层接口创建
    package com.ckm.dao; public interface UserDao {void getUser(); }

    Dao层实现类1创建
    package com.ckm.dao; public class UserDaoImpl implements UserDao{@Overridepublic void getUser() {System.out.println("获取了User数据"); }}

    Dao层实现类2创建
    package com.ckm.dao; public class UserDaoMysqlImpl implements UserDao{@Overridepublic void getUser() {System.out.println("mysql使用了数据"); }}

    Service层接口创建
    package com.ckm.service; public interface UserService {void getUser(); }

    Service层接口实现类创建
    package com.ckm.service; import com.ckm.dao.UserDao; import com.ckm.dao.UserDaoImpl; public class UserServiceImpl implements UserService{//private UserDao userDao = new UserDaoImpl(); //利用set进行动态实现值的注入private UserDao userDao; public void setUserDao(UserDao userDao){this.userDao = userDao; }@Overridepublic void getUser() {userDao.getUser(); }}

    单元测试
    import com.ckm.dao.UserDaoImpl; import com.ckm.dao.UserDaoMysqlImpl; import com.ckm.service.UserServiceImpl; public class TestIOC {public static void main(String[] args) {//用户实际调用service层 不会动dao层!UserServiceImpl userService = new UserServiceImpl(); userService.setUserDao(new UserDaoMysqlImpl()); userService.getUser(); }}

    Java|Java 中的控制反转(IOC)详解
    文章图片

    【Java|Java 中的控制反转(IOC)详解】
    Spring管理对象 resources中新建beans.xml文件

    dao层、Service层代码不变

    测试类
    import com.ckm.service.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIOC {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl"); userServiceImpl.getUser(); }}

    Java|Java 中的控制反转(IOC)详解
    文章图片


    Spring管理对象的简单例子 User类
    package com.ckm.pojo; public class Hello {private String str; public String getStr() {return str; }public void setStr(String str) {this.str = str; }@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}'; }}

    beans.xml
    package com.ckm.pojo; public class Hello {private String str; public String getStr() {return str; }public void setStr(String str) {this.str = str; }@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}'; }}

    测试类
    import com.ckm.pojo.Hello; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest {public static void main(String[] args) {//获取spring的上下文对象//xml加载必须new ClassPathXmlApplicationContext()ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); //我们的对象现在都在spring中管理,我们要使用,直接去里面取出来Hello hello = (Hello) context.getBean("hello"); System.out.println(hello.getStr()); }}

    Java|Java 中的控制反转(IOC)详解
    文章图片


    Bean无参构造类创建和有参构造类创建 当getBean的时候,这个类就已经被实例化了,就会执行无参构造方法

    有参构造的User类
    package com.ckm.pojo; public class User {private String name; //public User() {//System.out.println("无参构造"); //}public User(String name){this.name = name; }public String getName() {return name; }public void setName(String name) {this.name = name; }public void show(){System.out.println("name="+name); }}

    编写Beans.xml



    Spring的一些配置
    别名


    Bean的配置


    import


    总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更对内容!

      推荐阅读