spring02依赖注入DI

Ioc的另外一个名字叫依赖注入,讲的是同一个事情,只是站在不同的角度看待问题。

1.依赖注入  dependency injection

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

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

2.spring注入:构造器的注入·

3.spring注入:setter注入

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

a)常量注入:

package vo;

public class Student {

	private String name;
	public void setName(String name) {
		this.name = name;
	}
	public void show(){
		System.out.println("name="+name);
	}
}

<bean name="student" class="vo.Student">
<property name="name" value="张三丰" />
</bean>
b)对象注入(bean注入)

package vo;

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);
		System.out.println("name="+addr);
	}


}
package vo;

public class Address {

	private String address;

	public String getAddress() {
		return address;
	}

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




<bean id="address" class="vo.Address"></bean>

<bean id="student"class="vo.Student">

<property name="name" value="zhangsanfeng"></property>

<property name="address" ref="address"></property>

</bean>

c)数组注入

package vo;

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 show(){
		System.out.println("name="+name);
		System.out.println("name="+addr.getAddress());
		System.out.println("books="+books[0]);
	}
	public void setBooks(String[] books) {
		this.books = books;
	}

} 

<property name="books">
<array>
<value>三毛</value>
<value>1毛</value>
</array>
</property>
</bean>

d)List注入

Student.java

private List<String> hobbys;

public void setHobbys(List<String> hobbys) {
this.hobbys = hobbys;
}

beans.xml

<property name="hobbys">
<list>
<value>看书</value>
<value>写字</value>
</list>
</property>

e)map的注入:

<property name="cards">
<map>
<entry key="中国银行" ></entry>
<entry>
<key><value>工商银行</value></key>
<value>123424342323</value>
</entry>
<entry key="农业银行" value="123435345"></entry>
</map>
</property>

f)set 注入:

<property name="games">
<set>
<value>lol</value>
<value>saaed</value>
</set>
</property

g)Null注入:

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

h)Properties注入:

<property name="info">

<props>
<prop key="学号">3020432</prop>
<prop key="sex">男</prop>
</props>
</property>

I)p-namespace    p命名空间注入

需要在头文件中加入:xml

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

<!-属性依然要设置set方法->

<bean id="user" class="vo.User" p:name ="namespace" p:age="23">

J)  c注入 

需要在头文件中加入:xml

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

<bean id="u1" class="vo.User" c:name="noto" c:age="21" ></bean>

要求有对应参数的构造方法

package vo;

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

bean的作用域scope:singleton 单例(单例模式,整个容器中只有1个对象的实例)默认是单例的

<bean id="u1" class="vo.User" scope="singleton"></bean>

prototype:原型每次获取bean的时候都产生1个新的对象

<bean id="u1" class="vo.User" scope="prototype"></bean>

request:每次请求时,创建一个新的对象

<bean id="u1" class="vo.User" scope="request"></bean>

session: 在会话的范围内是1个对象

<bean id="u1" class="vo.User" scope="session"></bean>

global session 只在portlet下应用 表示application

application 在一个应用范围中是1个对象(spring4中特有的)

注:在整合struts2和spring时 需要将action设置为scope=“prototype”



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值