spring依赖注入(dependency injection)

spring依赖注入包括两个方面:

      依赖:指bean对象创建依赖于容器。bean对象的依赖资源

      注入:bean对象的依赖资源由容器来设置和装配

Spring的注入有两类:

1、构造器的注入:使用constructor-arg

<bean id="user" class="com.test.vo.User">  
       <!-- index指构造方法  参数下标从0开始     -->  
       <constructor-arg index="0" value="李四"/>    
</bean>
2、setter注入

要求被注入的属性,必须有set方法,set方法生成的方法名,由set+属性(首字母大写),如果属性是boolean类型,没有get方法,是is方法。

a、常量注入

<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
</bean>

b、bean的注入

<bean id="addr" class="com.test.vo.Address"/>
<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
	<property name="addr" ref="addr"/>
</bean>


Address.java

public class Address {
	private String address;

	public void setAddress(String address) {
		this.address = address;
	}

	public String getAddress() {
		return address;
	}
}

Student.java

public class Student {
	private String name;
	private Address addr;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void show(){
		System.out.println("name:"+name+" addr="+addr.getAddress());
	}
}

3、数组注入

beans.xml配置

<bean id="addr" class="com.test.vo.Address">
      <property name="address" value="回龙观"/>
</bean>
<bean id="student" class="com.test.vo.Student">
	<property name="name" value="小明"/>
	<property name="addr" ref="addr"/>
	<property name="books">
            <array>
		<value>傲慢与偏见</value>
		<value>仲夏夜之梦</value>
		<value>悲惨世界</value>
	    </array>
	</property>
</bean>
Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
	}
}

4、list注入

beans.xml配置

<bean id="addr" class="com.test.vo.Address">
      <property name="address" value="回龙观"/>
</bean>
<bean id="student" class="com.test.vo.Student">
      <property name="name" value="小明"/>
      <property name="addr" ref="addr"/>
      <property name="books">
	   <array>
		 <value>傲慢与偏见</value>
		 <value>仲夏夜之梦</value>
		 <value>悲惨世界</value>
	   </array>
	</property>
	<property name="hobbies">
	   <list>
		 <value>羽毛球</value>
		 <value>乒乓球</value>
		 <value>排球</value>
	   </list>
     </property>
</bean>
Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
	}
}
5、map注入

beans.xml配置添加

<property name="cards">
	<map>
	    <entry key="中国银行" value="12345678901"/>
	    <entry>
		<key><value>工商银行</value></key>
	        <value>32119876545</value>
	    </entry>  
	</map>
</property>

Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	private Map<String,String> cards;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void setCards(Map<String, String> cards) {
		this.cards = cards;
	}
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
		System.out.println("cards="+cards);
	}
}
6、set注入

<property name="games">
   <set>
	<value>开心消消乐</value>
	<value>宾果消消消</value>
   </set>
</property>
Student.java

public class Student {
	private String name;
	private Address addr;
	private String[] books;
	private List<String> hobbies;
	private Map<String,String> cards;
	private Set<String> games;
	public void setName(String name) {
		this.name = name;
	}
	public void setAddr(Address addr) {
		this.addr = addr;
	}
	public void setBooks(String[] books) {
		this.books = books;
	}
	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}
	public void setGames(Set<String> games) {
		this.games = games;
	}
	public void setCards(Map<String, String> cards) {
		this.cards = cards;
	}
	
	public void show(){
		System.out.println("name:"+name+" addr:"+addr.getAddress());
		System.out.println("books=");
		for(int i=0;i<books.length;i++){
			System.out.print(books[i]+"    ");
		}
		System.out.println();
		System.out.println("hobbies="+hobbies);
		System.out.println("cards="+cards);
		System.out.println("games="+games);
	}
}

7、Null注入

<property name="wife"><null/></property>

Student.java添加属性

private String wife;

8、properties注入

<property name="info">
	<props>
		<prop key="学号">20171050</prop>
		<prop key="sex">男</prop>
		<prop key="年级">大一</prop>
	</props>
</property>
Student.java添加变量

private Properties info;

Test测试类

public class Test {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		Student stu=(Student) context.getBean("student");
		stu.show();
	}
}
测试所有代码运行结果,如图:



9、p命名空间注入

需要在beans.xml配置头文件中加入

xmlns:p="http://www.springframework.org/schema/p"


beans.xml配置文件中添加

<!--p命名空间注入  属性依然要设置set方法  -->
	<bean id="user" class="com.test.vo.User" p:name="小红" p:age="12"/>

新建User.java

public class User {
	private String name;
	private int age;
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User[name="+name+",age="+age+"]";
	}

}
测试类改为

public class Test {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		User u=(User) context.getBean("user");
		System.out.println(u);
      }
}

测试结果:

User[name=小红,age=12]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值