spring 配置檔案 --bean

語言: CN / TW / HK

bean標配的基本配置

id:Bean例項在Spring容器中的唯一標識

class Bean的全限定名

scope

1.當scope的取值為singleton時

Bean的例項化個數: 1個

Bean的例項化時機:當Spri ng核心檔案被載入時,例項化配置的Bean例項

Bean的生命週期:

物件建立:當應用載入,建立容器時,物件就被建立了

物件執行:只要容器在,物件一直活著

物件銷燬:當應用解除安裝,銷燬容器時,物件就被銷燬了

2.當scope的取值 為prototype時

Bean的例項化個數:多個

Bean的例項化時機:當呼叫getBean()方法時例項化Bean

Bean的生命週期:

物件建立:當使用物件時,建立新的物件例項

物件執行:只要物件在使用中,就一直活著

物件銷燬:當物件長時間不用時,被Java 的垃圾回收器回收了

* init-method:指定類中的初始化方法名稱

* destroy-method:指定類中銷燬方法名稱

<bean id="userDao" class="com.ithema.dao.impl.UserDaoimpl" init-method="init" destroy-method="destory"></bean>

例項化bean物件

1,提供無參構造方法(預設)

2,靜態工廠例項化bean

1、建立工廠類

public class BeanDaoFactory {

public static BeanDao getBeanDao(){

System.out.println("bean dao factory running ...");

return new BeanDaoImpl();

}

}

2、配置bean

<bean id="beanDao" class="com.ithema.dao.impl.BeanDaoFactory" factory-method="getBeanDao" />

3、例項工廠例項化bean

1、定義例項工廠

public class BeanDaoFactory {

public BeanDao getBeanDao(){

System.out.println("bean dao factory running ...");

return new BeanDaoImpl();

}

}

2、配置bean

<!-- 1.配置例項工廠物件 -->

<bean id="beanFactory" class="factory.BeanDaoFactory" />

<!-- 2.配置beanDao物件 -->

<bean id="beanDao" factory-bean="beanFactory" factory-method="getBeanDao" />

測試程式碼

public class App {

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

BeanDao beanDao = (BeanDao) context.getBean("beanDao");

beanDao.save();

}

}

bean依賴注入的三種方式

set方法

1.set方法

public class UserServiceImp implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

2.配置Spring容器呼叫set方法進行注入

<bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean>

<bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" >

<!--        

name:表示UserServiceImpl裡UserDao物件的引數

ref:表示引用的是bean物件id為UserDao的物件(引用物件的注入)

-->

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

</bean>

P名稱空間注入

P名稱空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在配置檔案中,如下:

1.定義約束頭,引入p名稱空間:

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

2.修改注入方式:

<bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean>

<bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" p:userDao-ref="userDao">

</bean>

</bean>

2.1 構造方法

1.在UserServiceImpl中建立有參構造

public class UserServiceImp implements UserService {

private UserDao userDao;

public UserServiceImp(UserDao userDao){

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

2. 配置Spring容器呼叫有參構造時進行注入

<bean id="userDao" class="com.weihong.dao.impl.UserDaoImpl" scope="prototype"></bean>

<bean id="userService" class="com.weihong.service.serviceImp.UserServiceImp" >

<constructor-arg name="userDao" ref="userDao" ></constructor-arg>

<!--        name:表示UserServiceImpl裡UserDao物件的引數

ref:表示引用的是bean物件id為UserDao的物件

-->

</bean>

3.1注入普通資料型別

1.普通資料型別

public class UserDaoImpl implements UserDao {

private String username;

private Integer age;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public void save(){

System.out.println("age="+age+" username=" +username);

}

}

2.配置檔案

<bean id="userDao2" class="com.weihong.dao.impl.UserDaoImpl" >

<!--        name:表示物件屬性

value:表示為物件屬性賦值

ref:表示引用資料物件的注入

-->

<property name="username" value="張三"></property>

<property name="age" value="17" ></property>

</bean>

3.2注入集合資料型別

使用set注入

在UserDaoimpl新增集合  

private List<String> strList;

private Map<String, User> userMap;

private Properties properties;

public void setStrList(List<String> strList) {

this.strList = strList;

}

public void setUserMap(Map<String, User> userMap) {

this.userMap = userMap;

}

public void setProperties(Properties properties) {

this.properties = properties;

}

2.配置檔案

<bean id="user1" class="com.ithema.domain.User" >

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

<property name="addr" value="bai"></property>

</bean>

<bean id="user2" class="com.ithema.domain.User" >

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

<property name="addr" value="cq"></property>

</bean>

<bean id="userDao" class="com.ithema.dao.impl.UserDaoimpl" >

<property name="strList">

<list>

<value>aaa</value>

<value>bbb</value>

<value>ccc</value>

</list>

</property>

<property name="properties">

<props>

<prop key="k1">v1</prop>

<prop key="k2">v2</prop>

<prop key="k3">v3</prop>

</props>

</property>

<property name="userMap">

<map>

<entry key="u1" value-ref="user1"></entry>

<entry key="u2" value-ref="user2"></entry>

</map>

</property>

</bean>

4.引入其他的配置檔案    

<import resource="applicationContext-user .xml"></import>