Spring IOC注入(一)set方式注入

IOC注入的方式有好几种,现在就来学习一下set方式注入~

可以注入的内容有:

1.基本类型(8中基本类型+字符串)的装配
2.对象类型的装配
3.集合的装配

现在就来讲讲怎么用set方式注入的吧~

1.基本类型的装配:

配置文件set.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
     <bean id="helloBean" class="com.x.spring.bean.HelloBean">
		<property name="name">
			<value>tom</value>
		</property>
			<property name="age" value="20">
		</property>
	</bean>
    
</beans>

id是Bean的唯一标识,要求在整个配置文件中要唯一,也可使用name属性,bean标签里面的id和name属性都可以用来标识这个配置的对象,但是id会帮我们检查给对象起的名字是否规范(名字不能重复、不能用数字开头、不能有空格等等),如果检查出来了那么就会报错。name属性不会帮检查这些东西。

property 对于所有用set方式来注入的必须该标签

value是对以基本类型,都用value(标签/属性)来注入,可以实现自动的数据类型转换


HelloBean类:

public class HelloBean {

	private String name;
	private int age;
	public String sayHello(){
		return "hello "+name +",your age is" + age;
	}
	public HelloBean() {
		super();
		// TODO Auto-generated constructor stub
	}
	public HelloBean(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}
测试类SetTest:

public class SetTest {

	public static void main(String[] args) {
		//基本类型的装配
		ApplicationContext ac = 
				new ClassPathXmlApplicationContext("set.xml");
			//获取容器的一个实例
			HelloBean hb = (HelloBean) ac.getBean("helloBean");
			System.out.println(hb.sayHello());
	}
}


效果图:


2.对象类型的装配:

 (1)、<ref local=" "/> 用于涉及的对象的id在当前配置文件中(用于在本配置文件中配置了
的bean的引入同ref="..")

(2)、<ref bean=" "/>  用于涉及的对象的id不在本配置文件中(用于引用不在本配置文件中配置的bean)

(3)、使用property的ref属性引用

下面的是第三种方式的~

写了俩个xml文件:some.xml和other.xml

some.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
   <bean id="someBean" class="com.x.spring.bean.SomeBean">
		<property name="ob">
			<ref bean="otherBean" />
		</property>
	</bean> 
    
    
</beans>


other.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
   <bean id="otherBean" class="com.x.spring.bean.OtherBean">
		<property name="str1">
			<value>string1</value>
		</property>
	</bean>
</beans>

SomeBean:

public class SomeBean {
	private OtherBean ob;
	public void printInfo(){
		System.out.println("someBean "+ob);
	}
	public OtherBean getOb() {
		return ob;
	}
	public void setOb(OtherBean ob) {
		this.ob = ob;
	}
}
OtherBean:

public class OtherBean {
	private String str1;
	public String getStr1() {
		return str1;
	}
	public void setStr1(String str1) {
		this.str1 = str1;
	}
	public String toString(){
		return "OtherBean "+str1;
	}
}

测试类SetTest:

public class SetTest {

	public static void main(String[] args) {

			//对象类型的装配
		        String[] path = {"some.xml","other.xml"};
			ApplicationContext ac = new ClassPathXmlApplicationContext(path);
			SomeBean sb = (SomeBean) ac.getBean("someBean");
			sb.printInfo();
	}
}

效果图:


在这里写一下第二种方式的~

只需要改一下配置文件some.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
	<bean id="someBean" class="com.x.spring.bean.SomeBean">
		<property name="ob" ref="otherBean">
		  </property>
	</bean> 
    
    
</beans>


效果图就不贴了,和上面的一样~

3.集合的装配:

方式:配置元素<list> <set> <map> <props>

list.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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.2.xsd">
   <bean id="listBean" class="com.x.spring.bean.ListBean">
		<property name="listProperty">
			 <list>
			    <value>list1</value>
			    <value>list1</value>
			    <value>list3</value>
			 </list>
		</property>
		<property name="setProperty">
			 <set>
			    <value>set1</value>
			    <value>set1</value>
			    <value>set3</value>
			 </set>
		</property>
		<property name="mapProperty">
			 <map>
			    <entry key="key1">
				  <value>value1</value>
			    </entry>
			    <entry key="key2">
				  <value>value2</value>
			    </entry>
			 </map>
		</property>
		<property name="property">
		     <props>
			  <prop key="key1">prop1</prop>
			  <prop key="key2">prop2</prop>
			  <prop key="key3">prop3</prop>
		     </props>
		</property>
	</bean>
</beans>
ListBean类:

public class ListBean {

		private List listProperty;
		private Set setProperty;
		private Map mapProperty;
		private Properties property;
		public List getListProperty() {
			return listProperty;
		}
		public void setListProperty(List listProperty) {
			this.listProperty = listProperty;
		}
		public Set getSetProperty() {
			return setProperty;
		}
		public void setSetProperty(Set setProperty) {
			this.setProperty = setProperty;
		}
		public Map getMapProperty() {
			return mapProperty;
		}
		public void setMapProperty(Map mapProperty) {
			this.mapProperty = mapProperty;
		}
		public Properties getProperty() {
			return property;
		}
		public void setProperty(Properties property) {
			this.property = property;
		}
		public void printInfo(){
			System.out.println("listProperty:");
			System.out.println(listProperty);
			System.out.println("setProperty:");
			System.out.println(setProperty);
			Set set = mapProperty.entrySet();
			Iterator it = set.iterator();
			System.out.println("mapProperty:");
			while(it.hasNext()){
				 Map.Entry entry = (Entry) it.next();
				 System.out.println("Key " +entry.getKey() );
				 System.out.println("value "+entry.getValue());
			}
			System.out.println("props: ");
			Set set2 = property.entrySet();
			Iterator it2 = set2.iterator();
			while(it2.hasNext()){
				Map.Entry entry= (Entry) it2.next();
				System.out.println("key "+entry.getKey());
				System.out.println("value "+entry.getValue());
			}
		}	
}
这个好像没什么讲的~

SetTest测试类:

public class SetTest {

	public static void main(String[] args) {
			
		//集合的装配
		String path = "list.xml";
		ApplicationContext  ac =
			new ClassPathXmlApplicationContext(path);
		ListBean lb = (ListBean) ac.getBean("listBean");
		lb.printInfo();

	}
}
效果图:


写到这里set方式注入就写完了~


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值