Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring注入参数 #3

Open
zhaozhao15 opened this issue Apr 26, 2019 · 0 comments
Open

Spring注入参数 #3

zhaozhao15 opened this issue Apr 26, 2019 · 0 comments
Labels

Comments

@zhaozhao15
Copy link
Owner

Spring注入参数


  1. 注入基本类型值
  2. 注入bean
  3. 内部bean
  4. null值
  5. 级联属性
  6. 集合类型属性
package com.java1234.entity;

public class Dog {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}
package com.java1234.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class People {
	private int id;
	private String name;
	private int age;
	private Dog dog;
	private List<String> hobbies=new ArrayList<String>();
	private Set<String> loves=new HashSet<String>();
	private Map<String,String> works=new HashMap<String,String>();
	private Properties addresses=new Properties();
	
	public People() {
		super();
	}
	public People(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Set<String> getLoves() {
		return loves;
	}
	public void setLoves(Set<String> loves) {
		this.loves = loves;
	}
	public List<String> getHobbies() {
		return hobbies;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public Map<String, String> getWorks() {
		return works;
	}
	public void setWorks(Map<String, String> works) {
		this.works = works;
	}
	public Properties getAddresses() {
		return addresses;
	}
	public void setAddresses(Properties addresses) {
		this.addresses = addresses;
	}
	public Dog getDog() {
		return dog;
	}
	public void setDog(Dog dog) {
		this.dog = dog;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}

	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + ", age=" + age
				+ ", dog=" + dog + ", hobbies=" + hobbies + ", loves=" + loves
				+ ", works=" + works + ", addresses=" + addresses + "]";
	}
}

来看bean

1. 注入基本类型值

最简单的,注入基本类型。

    <bean id="people1" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
	</bean>

2. 注入bean

我们给people2注入的不是普通的属性,是一个bean——dog1。
ref="dog1"表示引用的是一个bean,不再是value。
这是spring管理的bean之间的嵌套。

    <bean id="dog1" class="com.java1234.entity.Dog">
		<property name="name" value="Jack"></property>
	</bean>
	
	<bean id="people2" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
		<property name="dog" ref="dog1"></property>
	</bean>

3. 内部bean注入

现在这个dog1即可以被people1引用也可以被people2引用,我们现在要一个新的狗,只能被一个people引用。
我们直接在bean内部注入属性。这个“内部”顾名思义,很好理解。

    <bean id="people3" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
		<property name="dog">
			<bean class="com.java1234.entity.Dog">
				<property name="name" value="Tom"></property>
			</bean>
		</property>
	</bean>

4. null值

假如说一个人没有狗。
属性dog内部直接是null。
(注意空指针异常)

    <bean id="people4" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
		<property name="dog">
			<null></null>
		</property>
	</bean>

5. 级联属性

dog.name是直接级联到了dog对象的name属性,而不像我们之前需要注入一个dog的bean。
需要注意我们在people类中必须要自己new一个dog实例,不然没有dog,显然直接去设置dog.name会有空指针异常,因为实际上相当于需要调用dog的set方法。

    <bean id="people5" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
		<property name="dog.name" value="Jack2"></property>
	</bean>

6. 集合类型属性

我们注入的属性是集合类型,比如list、set、map、properties。
在配置文件中看起来还是比较清晰的。

    <bean id="people6" class="com.java1234.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="蔡徐坤"></property>
		<property name="age" value="11"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>Rap</value>
				<value>打篮球</value>
			</set>
		</property>
		<property name="works">
			<map>
				<entry>
					<key><value>上午</value></key>
					<value>写代码</value>
				</entry>
				<entry>
					<key><value>下午</value></key>
					<value>测试代码</value>
				</entry>
			</map>
		</property>
		<property name="addresses">
			<props>
				<prop key="address1">aaaaa</prop>
				<prop key="address2">bbbbb</prop>
			</props>
		</property>
	</bean>

最后是测试代码,OK。

public class T {
	private ApplicationContext ac;

	@Before
	public void setUp() throws Exception {
		ac=new ClassPathXmlApplicationContext("beans.xml");
	}

	// 基本类型值
	@Test
	public void test1() {
		People people=(People)ac.getBean("people1");
		System.out.println(people);
	}
	
	// 注入bean
	@Test
	public void test2() {
		People people=(People)ac.getBean("people2");
		System.out.println(people);
	}
	
	// 内部bean
	@Test
	public void test3() {
		People people=(People)ac.getBean("people3");
		System.out.println(people);
	}
	
	// 注入null
	@Test
	public void test4() {
		People people=(People)ac.getBean("people4");
		System.out.println(people);
	}
	
	// 级联属性
	@Test
	public void test5() {
		People people=(People)ac.getBean("people5");
		System.out.println(people);
	}
	
	// 注入集合
	@Test
	public void test6() {
		People people=(People)ac.getBean("people6");
		System.out.println(people);
	}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant