spring02依赖注入DI

来源:互联网 发布:项城市乡镇人口数据 编辑:程序博客网 时间:2024/04/23 23:09

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;}@Overridepublic 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”


 
原创粉丝点击