• spring IOC --- 控制反转(依赖注入)----简单的实例


    IoC(Inversion of Control)控制反转,对象创建责任的反转,在springBeanFacotoryIoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。XmlBeanFacotory实现BeanFactory接口,通过获取xml配置文件数据,组成应用对象及对象间的依赖关系。

    spring中有三种注入方式,一种是setter注入,一种是接口注入,另一种是构造方法注入。

    使用IoC容器更加容易组合对象直接间关系,面向接口编程,降低耦合。

    在不使用spring框架之前,我们的service层中要使用dao层的对象,不得不在service层中new一个对象。如下:

    //dao层对象  
    public class UserDao{  
       publicvoid insert(User user){}  
    }  
       
    //service层对象  
    public classUserService{  
       publicvoid insert(User user){  
           UserDaouserdao = new UserDao();  
           userdao.insert(user);  
       }  
    }  

    存在的问题:层与层之间的依赖。

    使用框架后:

    //dao层对象  
    public class UserDao{  
        publicvoid insert(User user){}  
    }  
       
    //service层对象  
    public classUserService{  
       privateUserDao userdao;  
       
       publicUserDao getUserdao() {  
          returnuserdao;  
       }  
       publicvoid setUserdao(UserDao userdao) {  
          this.userdao= userdao;  
       }  
       
       publicvoid insert(User user){  
          userdao.insert(user);  
       }  
       
    }  
    

     service层要用dao层对象需要配置到xml配置文件中,至于对象是怎么创建的,关系是怎么组合的都交给了spring框架去实现。

    模拟实现

    创建需要被依赖(被实例化)的对象:User.java

    package com.spring.ioc;
    
    //..忽略input
    
    public class User {
    		private String userId;
    		private String userName;
    		private String userPassword;
    		private int age;
    		private List list;
    		private Set set;
    		private Map map;
    		
    		//各自的set、get方法忽略
    
    		@Override
    		public String toString() {
    			return "User [userId=" + userId + ", userName=" + userName
    					+ ", userPassword=" + userPassword + ", age=" + age + ", list="
    					+ list + ", set=" + set + ", map=" + map + "]";
    		}
    }
    

      

    spring配置使用:spring.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" xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    	<bean id="userBean" class="com.spring.ioc.User">
    	    
    		<!-- 构造器注入 -->
    		<constructor-arg index="0">
    			<value>张大明</value>
    		</constructor-arg>
    		<constructor-arg index="1">
    			<value>88888888</value>
    		</constructor-arg>
    		
    		<!-- 属性值注入 -->
    		<property name="age">
    			<value type="int">10</value>
    		</property>
    		
    		<!-- list注入 -->
    		<property name="list">
    			<list>
    				<value>list1</value>
    				<value>list2</value>
    				<value>list3</value>
    			</list>
    		</property>
    		<!-- set注入 -->
    		<property name="set">
    			<set>
    				<value>set1</value>
    				<value>set2</value>
    				<value>set3</value>
    			</set>
    		</property>
    		<!-- map注入 -->
    		<property name="map">
    			<map>
    				<entry>
    					<key>
    						<value>1</value>
    					</key>
    					<value>map1</value>
    				</entry>
    				<entry>
    					<key>
    						<value>2</value>
    					</key>
    					<value>map2</value>
    				</entry>
    				<entry>
    					<key>
    						<value>3</value>
    					</key>
    					<value>map3</value>
    				</entry>
    			</map>
    		</property>
    	</bean>
    </beans> 
    
    
      
    

      

    使用spring,依赖User。Text.java

    package com.spring.ioc;
    
    //忽略input
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    
    public class Test {
    
    	public static void main(String[] args) {
    		ApplicationContext applicationContext=new 
    				FileSystemXmlApplicationContext("src/com/spring/ioc/spring.xml");
    				//可以当做是控制反转的用法ioc
    				User user=(User)applicationContext.getBean("userBean");
    				//通过依赖注入(构造器注入)获取的值
    				System.out.println("userName:"+user.getUserName());
    				System.out.println("userPassword:"+user.getUserPassword());
    				System.out.println("age:"+user.getAge());
    				
    				List list=user.getList();
    				for(int i=0;i<list.size();i++){
    					System.out.println(list.get(i));
    				}
    				
    	}
    
    }
    

    运行结果:

      

    setter方法注入:

      <property name="user2" ref="user23"></property>



    <bean id="user23" class="com.spring.ioc.User2"> <constructor-arg name="other"> <value>2</value> </constructor-arg> <constructor-arg name="other2"> <value>asd</value> </constructor-arg> </bean>

      

     其他代码省略;说明:user2是 user 里的一个成员变量。

    此处通过setter方法设置元素的值,user23 属性配置是 user2 对象的引用。

  • 相关阅读:
    codeforces 732D
    我的ubuntu配置
    周末实在无聊,自己写了一遍被人写烂了的“贪吃蛇”,欢迎各位新手低手高手老手前来吐槽哈哈
    两种方式实现点击列表弹出列表索引
    浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
    写了个超级简单的“进度条”的demo,供新手参考,高手吐槽!
    javascript 使用 NodeList主意的问题
    js中的“||”和“&&”
    javascript call函数实现继承时遇到的问题
    javascript 解决innerText浏览器兼容
  • 原文地址:https://www.cnblogs.com/skyLogin/p/6571165.html
Copyright © 2020-2023  润新知