zoukankan      html  css  js  c++  java
  • 第二章 IoC Setter注入

         Setter注入又称为属性注入。是通过属性的setXXX()方法来注入Bean的属性值或依赖对象。由于Setter注入具有可选择性和灵活性高的优点,因此Setter注入是实际应用中最常用的注入方式。

     


    ref的方式


     

    a、使用2.2的例子中的UserDaoUserDaoImpl

     

    [java]  view plain copy print ?
     
    1. public interface UserDao {  
    2.     public void save();  
    3. }  

    [java]  view plain copy print ?
     
    1. public class UserDaoImpl implements UserDao {  
    2.     public void save() {  
    3.         System.out.println("保存用户...");  
    4.     }  
    5. }  

    b、创建UserService接口及其实现类UserServiceImpl

    public interface UserService {
    	public void addUser();
    }
    public class UserServiceImpl implements UserService {
    	/*
    	 * 在service层使用dao层的接口对象
    	 * 接口对象必须有其setter方法,以供运行期spring注入值
    	 */
    	private UserDao userDao;
    	
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    
    	public void addUser() {
    		userDao.save();
    	}
    }


     

    c、将UserDaoImplUserServiceImpl交由Spring管理

    <bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>
    	
    	<!-- property是UserServiceImpl中的属性设置,这些属性必须有setter方法。name是属性的名字,与类中的名字相同。ref是引用,引用的是上面配置好的UserDaoImpl的name -->
    	<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
    		<property name="userDao" ref="userDao"></property>
    	</bean>


     

    d、测试

    ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
    		UserService userService = (UserService) context.getBean("userService");
    		userService.addUser();



     

    注入内部Bean


    注入内部Bean其实也是ref的方式基本一样,只是在配置的时候不大相同而已。UserDaoImpl不再需要作为单独的Bean交由Spring管理,而是作为UserServiceImpl的一部分来进行配置。

    配置:

    <!-- property是UserServiceImpl中的属性设置,这些属性必须有setter方法。name是属性的名字,与类中的名字相同。Bean是属性对象所属的类的完整类名 -->
    	<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
    		<property name="userDao">
    			<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>	
    		</property>
    	</bean>




    注入基本类型


    如:UserService中有一个String类型的字符串username:

    public class UserServiceImpl implements UserService {
    	private UserDao userDao;
    	private String username;
    	
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public void setUserDao(UserDao userDao) {
    		this.userDao = userDao;
    	}
    
    	public void addUser() {
    		System.out.println(username);
    		userDao.save();
    	}
    }

    配置:

     

    <bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
    		<property name="userDao">
    			<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>		
    		</property>
    		<property name="username" value="zhangsan"></property>
    	</bean>



    注入集合


    aListSet

    类中有一个集合属性及其setter方法。

     

    private Set<String> usernames;
    
    public void setUsernames(Set<String usernames){
          this.usernames = usernames;
    }


    配置:


    <property name="usernames">
    			<list>
    				<value>aaa</value>
    				<value>bbb</value>
    				<value>ccc</value>
    			</list>
    		</property>



    或者:

     

    <property name=" usernames">
    			<set>
    				<value>aaa</value>
    				<value>bbb</value>
    				<value>ccc</value>
    			</set>
    		</property>



     

    bMap

    类中的属性:

            private Map<Integer, String> map;
    	
    	public void setMap(Map<Integer, String> map) {
    		this.map = map;
    	}
    

    配置:

    <property name="map">
    			<map>
    				<entry key="1">
    					<value>aaa</value>
    				</entry>
    				<entry key="2">
    					<value>bbb</value>
    				</entry>
    			</map>
    		</property>



     

    cProperties

             Properties类型其实可以看成是Map类型的一种。Properties的键和值都只能是字符串。

    类中的属性:

            private Properties mails;
    	
    	public void setMails(Properties mails) {
    		this.mails = mails;
    	}

    配置:

    <property name="mails">
    			<props>
    				<prop key="mailOfZhang">zhangsan_2013@163.com</prop>
    				<prop key="mailOfLi">Lixiaolong_abcxx@qq.com</prop>
    			</props>
    		</property>



  • 相关阅读:
    枚举
    log4j 简单应用
    [luogu4728 HNOI2009] 双递增序列 (dp)
    [luogu3760 TJOI2017] 异或和(树状数组)
    [luogu1485 HNOI2009] 有趣的数列 (组合数学 卡特兰数)
    [luogu4054 JSOI2009] 计数问题(2D BIT)
    [luogu2594 ZJOI2009]染色游戏(博弈论)
    [luogu2591 ZJOI2009] 函数
    [luogu2148 SDOI2009] E&D (博弈论)
    [luogu2154 SDOI2009] 虔诚的墓主人(树状数组+组合数)
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3141346.html
Copyright © 2011-2022 走看看