Bean标签

Bean标签配置范围

image.png
image.png

Bean生命周期配置

image.png

Bean的依赖注入概念

image.png

注入依赖

实现构造注入

实体类

  1. public class AccountServiceImpl implements IAccountService {
  2. private String name;
  3. private Integer age;
  4. private Date time;
  5. public AccountServiceImpl(String name, Integer age, Date time) {
  6. this.name = name;
  7. this.age = age;
  8. this.time = time;
  9. }
  10. public void saveAccount() {
  11. System.out.println("service"+name+age+time);
  12. }
  13. }

配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. https://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean id="accountService" class="org.com.qst.service.impl.AccountServiceImpl">
  7. <constructor-arg name="name" value="mys"></constructor-arg>
  8. <constructor-arg name="age" value="21"></constructor-arg>
  9. <constructor-arg name="time" ref="now"></constructor-arg>
  10. </bean>
  11. <bean id="now" class="java.util.Date"></bean>
  12. </beans>

注入不同的数据类型

注入直接量(基本数据类型,字符串)

使用子元素注入字符串,基本数据类型和包装类型

<bean id="User" class="entity.User">
    <property name="username">
        <value>张三</value>
    </property>
    <property name="age">
        <value>20</value>
    </property>    
</bean>

引用其他bean组件

spring中的组件可以互相引用,从而建立依赖关系

<!--定义UserDao对象,并指定id为userDao-->
    <bean id="userDao" class="dao.UserDao"/>
 <!--定义UserService对象,并指定id为userService-->
    <bean id="userService" class="service.UserService">
    <!--为UserService的dao属性赋值,使用ref bean模式-->
    <property name="dao">
   <!--引用id为userDao的对象为dao赋值-->
    <ref bean="userDao"/>
    </property>
   <!--为UserService的dao属性赋值,使用ref local模式-->
    <property name="dao">
   <!--引用id为userDao的对象为dao赋值-->
    <ref local="userDao"/>
    </property>
    </bean>

local和bean的区别在于,spring的配置文件是可以拆分成多个的,,使用local属性只能在同一个配置文件中检索bean的id,
而使用bean属性可以在其他配置文件中检索id

使用内部bean

如果一个bean组件只在一处使用,可以把它定义为内部bean

<!--定义UserService对象,并指定id为userService-->
<bean id="userService" class="service.UserService">
    <!--为userService的dao赋值-->
  <property name="dao">
      <!--定义userDao对象-->  
    <bean class="dao.UserDao"/>
  </property>
</bean>

注入集合类型的属性

list集合

对于list集合或数组类型的属性,可以使用 标签来注入

<bean id="user" class="entity.User">
    <property name="userlist">
          <list>
        <!--定义list集合或数组中的元素-->
            <value>足球</value>
        <value>篮球</value>
     </list>  
  </property>
</bean>

set集合

对于set集合可以使用标签注入

<bean id="user" class="entity.User">
    <property name="userlist">
          <set>
        <!--定义set集合中的元素-->
            <value>足球</value>
        <value>篮球</value>
     </set>  
  </property>
</bean>

map集合

对于map集合可以使用标签注入

<bean id="user" class="entity.User">
    <property name="userlist">
          <map>
            <!--map集合中的键值对-->
        <entry>
          <key>
              <value>name</value>
          </key>
          <value>张三</value>
        </entry>
        <entry>
          <key>
              <value>age</value>
          </key>
          <value>20</value>
        </entry>
        </map>
  </property>
</bean>

properties

对于properties类型的属性可以使用实例的方式注入

<bean id="user" class="entity.User">
    <property name="userlist">
    <props>
      <!--定义properties中的键值对-->
        <prop key="name">张三</prop>
      <prop key="age">20</prop>
    </props>
  </property>
</bean>

注入空字符串和NULL值

可以使用来注入空字符串,使用注入null值

<!--注入空字符串-->
<bean id="user" class="entity.User">
    <property name="userlist"><value></value></property>
</bean>
<!--注入NULL值-->
<bean id="user" class="entity.User">
    <property name="userlist"><null/></property>
</bean>