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

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

    IOC理论推导

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

    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{     @Override     public void getUser() {         System.out.println("获取了User数据");     } } 

    Dao层实现类2创建

     package com.ckm.dao; public class UserDaoMysqlImpl implements UserDao{     @Override     public 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;     }     @Override     public 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 中的控制反转(IOC)详解

    Spring管理对象

    resources中新建beans.xml文件

     <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://www.springframework.org/schema/beans         https://www.springframework.org/schema/beans/spring-beans.xsd">     <!--使用Spring来创建对象,在Spring这些都称为Bean-->     <!--bean = 对象-->     <!--id = 变量名-->     <!--class = new的对象-->     <!--property 相当于给对象中的属性设值-->     <bean id="DaoImpl" class="com.ckm.dao.UserDaoImpl" />     <bean id="MysqlImpl" class="com.ckm.dao.UserDaoMysqlImpl" />     <bean id="UserServiceImpl" class="com.ckm.service.UserServiceImpl">         <!--         value具体的值,基本数据类型         ref是引用Spring中创建好的对象         用户需要什么 就直接修改ref就ok         -->         <property name="userDao" ref="MysqlImpl" />     </bean> </beans> 

    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 中的控制反转(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;     }     @Override     public 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;     }     @Override     public 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 中的控制反转(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

         <!--第一种 下标赋值-->     <bean id="user" class="com.ckm.pojo.User">         <constructor-arg index="0" value="这个是第一种有参设置的name"/>     </bean> 

         <!--第二种 直接通过参数名-->     <bean id="user" class="com.ckm.pojo.User">         <constructor-arg name="name" value="这个是第二种方法是有参设置的name"/>     </bean> 

    Spring的一些配置

    别名

         <!--alias是别名,我们可以使用这个别名来获取这个对象-->     <alias name="user" alias="userNew"/> 

    Bean的配置

         <!--在bean中name也是别名,可以同时取多个别名-->     <bean id="user" class="com.ckm.pojo.User" name="user1,user2,user3,user4"/> 

    import

        <!--这个import,一般用于团队开发,他可以将多个配置文件导入合并成一个-->     <import resource="beans1.xml"/>     <import resource="beans2.xml"/> 

    总结

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

    本站由小牛团队全力维护,小牛十年了,大家已经步入中年 。本站源码全部经过团队成员测试并调试,价格可能比其它网站略贵几元钱,不解释!
    小牛资源 » Java 中的控制反转(IOC)详解

    发表评论

    全站资源亲测可用,价格略高几元,不解释

    立即查看 了解详情