Spring IOC Bean标签属性介绍(内含教学视频+源代码)
教学视频+源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87442649
 
目录
- Spring IOC Bean标签属性介绍(内含教学视频+源代码)
- `教学视频+源代码下载链接地址`:[https://download.csdn.net/download/weixin_46411355/87442649](https://download.csdn.net/download/weixin_46411355/87442649)
- 0.Bean标签属性介绍
- 1.0 新建一个Maven工程
- 1.1 pom.xml
- 1.2 实体类JavaBean
- 1.2.1 User类
 
- 1.3 当Scope="singleton"时
- 1.4 当 Scope="singleton" 且 lazy-init="true" 时
- 1.5 当scope="prototype"时
- 1.6 当scope="prototype" 且 lazy-init="true" 时
- 1.7 小结
- 1.8 depends-on
- 1.8.0 实体类JavaBean
- 1.8.0.1 Student类
 
- 1.8.1 配置文件都不加lazy-init=true
- 1.8.2 被依赖者(Student)加了lazy-init="true"
- 1.8.3 依赖者(依赖其它类)(User)加了lazy-init="true"
- 1.8.4 两者都加lazy-init="true"
 
- 1.9 init-method和destroy-method
- 1.9.1 实体类JavaBean User加自定义的初始化方法和销毁方法
- 1.9.3 加了lazy-init="true"
 
- 1.10 primary
- 1.10.1 配置文件
- 1.10.2 测试类
- 1.10.3 测试效果
 
 
0.Bean标签属性介绍
id:是bean的唯一标识。一个bean,其id值只能有一个。在整个IOC容器中,id值不允许重复,使用id名称作为key。
name:一个bean的名称,可以存在多个,多个之间使用逗号分隔。不论bean有没有定义name属性,默认id都会当做name。
class:bean的具体的类型,即实体类JavaBean的全限定类名,由包名和类名组成。
scope:bean的作用域
| prototype | 非单例,每次获取都会创建一个新的bean对象 | 
| singleton | 单例,多次获取永远同一个bean,默认值 | 
| request | 一次请求,基于web项目的bean的作用域 | 
| session | 一次会话,基于web项目的bean的作用域 | 
lazy-init:延迟初始化,默认只要加载了配置文件,bean对象就会被初始化。lazy-init则是获取时才会初始化,只针对单例模式有效。 非单例每次都会创建,没有延迟初始化的意义。
depends-on:初始化时依赖的对象,当前对象初始化前需先初始化depends-on指定的对象
init-method:对象初始化后调用的方法
destroy-method:对象销毁时,调用的方法
autowire:属性自动装配。byName根据属性名称装配,byType根据类型装配。
autowire-candidate:是否允许作为自动装配的候选项。true作为自动装配的候选项,false不作为自动装配的候选项。
primary:优先使用该bean,因为Spring需要支持使用那些类型查找对象。在一个大类型下,可能存在多个小类型。如果根据大类型装配属性时,不知道使用哪个具体的对象,则可以根据Primary设置优先级。
1.0 新建一个Maven工程
1.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.bjpowernode</groupId>
    <artifactId>02_IOCProject</artifactId>
    <version>1.0.0</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.18</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
1.2 实体类JavaBean
1.2.1 User类
com.bjpowernode.domain包下
 User.java
package com.bjpowernode.domain;
import java.util.Objects;
public class User {
    private Long id;
    private String name;
    private Integer age;
    public User(){
        System.out.println("create User");
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(age, user.age);
    }
}
1.3 当Scope="singleton"时
resources资源文件夹下
 右击New->XML Configuration File->Spring config
 命名为applicationContext
 
1.3.1 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="singleton"></bean>
</beans>
1.3.2 测试类
     @Test
    public void testBeanLabel_ScopeSingleton() {
        //获取Spring容器
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext1.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        //从spring中获取bean对象
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        User user1Id = (User) classPathXmlApplicationContext.getBean("user1");
        User uName = (User) classPathXmlApplicationContext.getBean("u");
        User u2Name = (User) classPathXmlApplicationContext.getBean("u2");
        
        System.out.println("UserClass = " + UserClass.toString());
        System.out.println("user1Id = " + user1Id.toString());
        System.out.println("uName = " + uName.toString());
        System.out.println("u2Name = " + u2Name.toString());
        System.out.println(UserClass == user1Id);
        System.out.println(UserClass.equals(user1Id));
    }
1.3.3 测试结果
 
 1.3.4 测试结果分析
 说明初始化容器的过程中,就创建了对象
 配置scope=“singleton”,打印出来的对象的地址是一样的
单例的饿汉式
1.4 当 Scope=“singleton” 且 lazy-init=“true” 时
1.4.1 applicationContext2.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="singleton" lazy-init="true"></bean>
</beans>
1.4.2 测试类
  @Test
    public void testBeanLabel_ScopeSingleton_LazyInitTrue() {
        //获取Spring容器
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext2.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        //从spring中获取bean对象
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        User user1Id = (User) classPathXmlApplicationContext.getBean("user1");
        User uName = (User) classPathXmlApplicationContext.getBean("u");
        User u2Name = (User) classPathXmlApplicationContext.getBean("u2");
        System.out.println("UserClass = " + UserClass.toString());
        System.out.println("user1Id = " + user1Id.toString());
        System.out.println("uName = " + uName.toString());
        System.out.println("u2Name = " + u2Name.toString());
        System.out.println(UserClass == user1Id);
        System.out.println(UserClass.equals(user1Id));
    }
1.4.3 测试结果
 
 1.4.4 测试结果分析
 lazy-init:初始化对象的延迟,默认为false,设置为true,则在初始化容器结束之后创建对象
 配置scope=“singleton”,打印出来的对象的地址是一样的
单例的懒汉式
1.5 当scope="prototype"时
1.5.1 applicationContext3.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="prototype"></bean>
</beans>
1.5.2 测试类
  @Test
    public void testBeanLabel_ScopePrototype() {
        //获取Spring容器
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext3.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        //从spring中获取bean对象
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        User user1Id = (User) classPathXmlApplicationContext.getBean("user1");
        User uName = (User) classPathXmlApplicationContext.getBean("u");
        User u2Name = (User) classPathXmlApplicationContext.getBean("u2");
        System.out.println("UserClass = " + UserClass.toString());
        System.out.println("user1Id = " + user1Id.toString());
        System.out.println("uName = " + uName.toString());
        System.out.println("u2Name = " + u2Name.toString());
        System.out.println(UserClass == user1Id);
        System.out.println(UserClass.equals(user1Id));
    }
1.5.3 测试结果
 
 1.5.4 测试结果分析
 在容器初始化结束后创建bean对象
 配置scope=“singleton”,打印出来的对象的地址是不同的,说明是多例
1.6 当scope=“prototype” 且 lazy-init=“true” 时
1.6.1 applicationContext4.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="prototype" lazy-init="true"></bean>
</beans>
1.6.2 测试类
  @Test
    public void testBeanLabel_ScopePrototype_LazyInit() {
        //获取Spring容器
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext4.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        //从spring中获取bean对象
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        User user1Id = (User) classPathXmlApplicationContext.getBean("user1");
        User uName = (User) classPathXmlApplicationContext.getBean("u");
        User u2Name = (User) classPathXmlApplicationContext.getBean("u2");
        System.out.println("UserClass = " + UserClass.toString());
        System.out.println("user1Id = " + user1Id.toString());
        System.out.println("uName = " + uName.toString());
        System.out.println("u2Name = " + u2Name.toString());
        System.out.println(UserClass == user1Id);
        System.out.println(UserClass.equals(user1Id));
    }
1.6.3 测试结果
 
 1.6.4 测试结果分析
 在容器初始化结束后创建bean对象,和不配置lazy-init="true"结果一样,说明配置了scope="protoype"多例模式,默认就是init-lazy=“true”,即默认就是懒加载
配置scope=“singleton”,打印出来的对象的地址是不同的说明是多例
1.7 小结
当scope=“singleton”时
 默认是单例的饿汉式,即创建bean对象,在初始化容器对象结束之前完成
 如果在配置lazy-init=“true”,则就是单例的懒汉式,即创建bean对象,在初始化容器对象结束之后完成
当scope=“prototype”时
 是多例,不管是否配置lazy-init=“true”,创建bean对象,都在初始化容器对象结束之后完成,即默认lazy-init=“true”
1.8 depends-on
1.8.0 实体类JavaBean
1.8.0.1 Student类
package com.bjpowernode.domain;
import java.util.Objects;
public class Student {
    private Long id;
    private String name;
    private Integer age;
    public Student(){
        System.out.println("create Student");
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Objects.equals(id, student.id) && Objects.equals(name, student.name) && Objects.equals(age, student.age);
    }
}
1.8.1 配置文件都不加lazy-init=true
配置文件
 applicationContext5.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user" name="u,u1,u2" class="com.bjpowernode.domain.User" depends-on="student"/>
    <bean id="student" class="com.bjpowernode.domain.Student"/>
</beans>
测试类
 @Test
    public void testBeanLabel_dependsOn(){
        //获取Spring容器对象
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext5.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
    }
测试结果
 
 说明:
 1、因为在bean中,user加了depends-on student,所以在创建User时会先创建Student对象
 2、都在初始化容器结束之前,完成bean对象的创建
1.8.2 被依赖者(Student)加了lazy-init=“true”
配置文件
 applicationContext6.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user" name="u,u1,u2" class="com.bjpowernode.domain.User" depends-on="student"/>
    <bean id="student" class="com.bjpowernode.domain.Student" lazy-init="true"/>
</beans>
测试类
  @Test
    public void testBeanLabel_dependsOnStudentLazyInit(){
        //获取Spring容器对象
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext6.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
    }
测试结果
 
 说明:
 1、因为在bean中,user加了depends-on student,所以在创建User时会先创建Student对象
 2、都在初始化容器结束之前,完成bean对象的创建
 3、被依赖者(Student)加了"lazy-init=true"没有变化
1.8.3 依赖者(依赖其它类)(User)加了lazy-init=“true”
配置文件applicationContext7.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user" name="u,u1,u2" class="com.bjpowernode.domain.User" depends-on="student" lazy-init="true"/>
    <bean id="student" class="com.bjpowernode.domain.Student" />
</beans>
测试类
 @Test
    public void testBeanLabel_dependsOnUserLazyInit(){
        //获取Spring容器对象
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext7.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
    }
测试效果
 
 说明:
 1、因为在bean中,user加了depends-on student,所以在创建User时会先创建Student对象
 2、被依赖者(Student)在初始化容器结束之前,完成bean对象的创建
 3、依赖者(依赖其它类)(User)加了lazy-init="true"发生变化,在初始化容器结束之后创建User bean 对象
1.8.4 两者都加lazy-init=“true”
配置文件applicationContext8.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user" name="u,u1,u2" class="com.bjpowernode.domain.User" depends-on="student" lazy-init="true"/>
    <bean id="student" class="com.bjpowernode.domain.Student" lazy-init="true" />
</beans>
测试类
  @Test
    public void testBeanLabel_dependsOnBothLazyInit(){
        //获取Spring容器对象
        System.out.println("------------------------初始化容器开始------------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext8.xml");
        System.out.println("----------------------初始化容器结束--------------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
    }
测试效果
 
 说明:
 1、因为在bean中,user加了depends-on student,所以在创建User时会先创建Student对象
 2、因为两个bean都加了lazy-init=“true”,所以都在初始化容器结束之后,完成bean对象的创建
1.9 init-method和destroy-method
1.9.1 实体类JavaBean User加自定义的初始化方法和销毁方法

 User类
package com.bjpowernode.domain;
import java.util.Objects;
public class User {
    private Long id;
    private String name;
    private Integer age;
    public User(){
        System.out.println("create User");
    }
    public void MyInitMethod(){
        System.out.println("这是我自定义的初始化方法");
    }
    public void MyDestroyMethod(){
        System.out.println("这是我自定义的销毁方法");
    }
    public Long getId() {
        return id;
    }
```c
在这里插入代码片
public void setId(Long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Integer getAge() {
    return age;
}
public void setAge(Integer age) {
    this.age = age;
}
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    User user = (User) o;
    return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(age, user.age);
}
}
### 1.9.2 不加lazy-init="true"
配置文件
applicationContext9.xml
```c
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="singleton" init-method="MyInitMethod" destroy-method="MyDestroyMethod" ></bean>
</beans>
测试类
  @Test
    public void testInitMethodAndDestroyMethod(){
        System.out.println("-------------------------初始化容器开始------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext9.xml");
        System.out.println("--------------------------初始化容器结束-----------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
        classPathXmlApplicationContext.close();
    }
测试效果
 
1.9.3 加了lazy-init=“true”
配置文件
 applicationContext10.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user1" name="u,u1,u2" class="com.bjpowernode.domain.User" scope="singleton" init-method="MyInitMethod" destroy-method="MyDestroyMethod" lazy-init="true"></bean>
</beans>
测试类
 @Test
    public void testInitMethodAndDestroyMethod_LazyInit(){
        System.out.println("-------------------------初始化容器开始------------------------");
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext10.xml");
        System.out.println("--------------------------初始化容器结束-----------------------------");
        User UserClass = classPathXmlApplicationContext.getBean(User.class);
        System.out.println("UserClass = " + UserClass);
        classPathXmlApplicationContext.close();
    }
测试效果
 
1.10 primary
1.10.1 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置要交给Spring管理的类的信息
    class属性     配置类的全限定名
    id属性        给当前bean对象,标注一个唯一标识 当前文档中只有一个
    name属性      可以设置多个name的值
    scope属性     表示作用域(指对象的创建是单例还是多例),singleton单例(默认值),prototype多例
    lazy-init    初始化对象的延迟,默认为false
    -->
    <bean id="user" name="u,u1,u2" class="com.bjpowernode.domain.User" depends-on="student" lazy-init="true"/>
    <bean id="student" class="com.bjpowernode.domain.Student" lazy-init="true" />
    <bean id="student1" class="com.bjpowernode.domain.Student" lazy-init="true" primary="true" >
        <property name="id" value="173020444"/>
        <property name="age" value="24"/>
        <property name="name" value="HHH"/>
    </bean>
</beans>
1.10.2 测试类
@Test
    public void testOPrimary(){
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext11.xml");
        Student student = classPathXmlApplicationContext.getBean(Student.class);
        System.out.println("student = " + student);
    }
1.10.3 测试效果




















