IOC装配Bean(2)

Spring框架Bean实例化的方式

提供了三种方式实例化Bean.
* 构造方法实例化:(默认无参数)
* 静态工厂实例化:
* 实例工厂实例化:

无参数构造方法的实例化

<!-- 默认情况下使用的就是无参数的构造方法. -->
    <bean id="bean1" class="cn.spring.demo2.Bean1"></bean>

package cn.spring.demo2;
/*
 * 使用无参数的构造方法实例化
 */
public class Bean1 {
    public Bean1(){};
}

静态工厂实例化

<!-- 静态工程实例化 -->
    <bean id="bean2" class="cn.spring.demo2.Bean2Factory"
        factory-method="getBean2"></bean>
package cn.spring.demo2;
/*
 * 使用静态工厂实例化
 */
public class Bean2 {

}
package cn.spring.demo2;

/*
 * Bean2的静态工程
 */
public class Bean2Factory {
    public static Bean2 getBean2() {
        System.out.println("静态工程或得bean2的方法……");
        return new Bean2();
    }
}

实例工厂实例化

<!-- 使用实例工程实例化 -->
    <bean id="bean3" factory-bean="bean3Factroy" factory-method="getBean3"></bean>
    <bean id="bean3Factroy" class="cn.spring.demo2.Bean3Factory"></bean>
package cn.spring.demo2;
/*
 * 使用实例工厂实例化
 */
public class Bean3 {

}
package cn.spring.demo2;

/**
 * 使用实例方法
 *
 * @author NOP
 *
 */
public class Bean3Factory {
    public Bean3 getBean3() {
        System.out.println("实例工厂得bean3的方法……");
        return new Bean3();
    }

}

测试类编写

package cn.spring.demo2;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SprintTest2 {

    @Test
    // 无参数的构造方法实例化
    public void demo1() {
        ApplicationContext applicaionContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Bean1 bean1 = (Bean1) applicaionContext.getBean("bean1");
        System.out.println(bean1);
    }

    @Test
    // 静态工厂实例化
    public void demo2() {
        ApplicationContext applicaionContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Bean2 bean2 = (Bean2) applicaionContext.getBean("bean2");
        System.out.println(bean2);
    }

    @Test
    // 实例工程实例化
    public void demo3() {
        ApplicationContext applicaionContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Bean3 bean3 = (Bean3) applicaionContext.getBean("bean3");
        System.out.println(bean3);
    }

}

Bean的其他配置

id和name的区别

  • id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号
  • name没有这些要求
    ***** 如果bean标签上没有配置id,那么name可以作为id.
    ***** 开发中Spring和Struts1整合的时候, /login.
    <bean name=”/login” class=””>

现在的开发中都使用id属性即可.

类的作用范围

  • scope属性:

    • singleton:单例的.(默认的值.)
    • prototype:多例的.
    • request:web开发中.创建了一个对象,将这个对象存入request范围,request.setAttribute();
    • session: web开发中.创建了一个对象,将这个对象存入session范围,session.setAttribute();
    • globalSession:一般用于Porlet应用环境.指的是分布式开发.不是porlet环境,globalSession等同于session;

实际开发中主要使用singleton,prototype

package cn.spring.demo3;

public class Customer {
    public Customer(){
        super();
        System.out.println("Customer类实例化……");
    }
}
package cn.spring.demo3;

public class Product {
    private String name ;

    public void setName(String name) {
        this.name = name;
    }
    public void setup(){
        System.out.println("初始化……");
    }
    public void teardown(){
        System.out.println("销毁……");
    }
    @Override
    public String toString() {
        return "Product [name=" + name + "]";
    }

}
<!-- cn.spring.demo3 bean作用范围-->
    <!--默认是单实例-->
    <bean id="customer" class="cn.spring.demo3.Customer"    scope="singleton"></bean>
        <!--
        测试类结果:单实例对象一样
        Customer类实例化……
        [email protected]
        [email protected]
    -->
    <!-- 多实例 -->
    <bean id="customer" class="cn.spring.demo3.Customer" scope="prototype"></bean>
    <!--
        测试类结果:多实例对象不一样
        Customer类实例化……
        [email protected]
        Customer类实例化……
        [email protected]
    -->
    <!-- bean的生命周期-->
    <bean id="Product" class="cn.spring.demo3.Product" init-method="setup" destroy-method="teardown">
    <property name="name" value="空调"/>
    </bean>

    <!-- cn.spring.demo3 bean作用范围-->
package cn.spring.demo3;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SprintTest3 {
    @Test
    // 测试单实例或多实例
    public void demo1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Customer c1 = (Customer) applicationContext.getBean("customer");
        System.out.println(c1);

        Customer c2 = (Customer) applicationContext.getBean("customer");
        System.out.println(c2);
    }

    @Test
    public void demo2() {
    //ApplicationContext只会执行 init-method="setup" 方法
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Product p1 = (Product) applicationContext.getBean("Product");
    /*
    *结果:
    *初始化……
    */

        // 执行销毁的方法用ClassPathXmlApplicationContext有close的方法
        ClassPathXmlApplicationContext applicationContext1 = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Product p2 = (Product) applicationContext.getBean("Product");
        System.out.println(p2);
        // 会执行destroy-method="teardown"
        applicationContext1.close();
            /*
    *结果:
    *初始化……
    *销毁......
    */

    }
}

原文地址:http://blog.51cto.com/4534309/2107567

时间: 2024-10-16 13:04:25

IOC装配Bean(2)的相关文章

Spring框架---IOC装配Bean

IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicationContext.xml配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans&

IOC装配Bean(注解方式)(5)

Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注解: @Repository 用于对DAO实现类进行标注 @Service 用于对Service实现类进行标注 @Controller 用于对Controller实现类进行标注 ***** 三个注解为了后续版本进行增强的. Bean的属性注入: 普通属性; @Value(value="itcast&q

IOC装配Bean

Spring框架Bean实例化的方式 提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 无参数构造方法的实例化 <!-- 默认情况下使用的就是无参数的构造方法. --> <bean id="bean1" class="cn.yzu.spring3.demo2.Bean1"></bean> 静态工厂实例化 public class Bean2Factory { public sta

Spring之IOC&amp;DI/装配Bean(一)

简介 今天学习Spring的第一天,无非也就是入门基础知识.主要了解IOC和DI部分,要熟练掌握哦~ Spring简介 1. Spring介绍 Spring是一个非常活跃的开源框架:它是一个基于Core来构架多层JavaEE系统的框架,它的主要目地是简化企业开发. Spring以一种非侵入式的方式来管理你的代码,Spring提倡"最少侵入",这也就意味着你可以适当的时候安装或卸载Spring 2. Spring框架的优势 ?方便解耦,简化开发 ?Spring就是一个大工厂,可以将所有对

(spring-第2回)Spring的Schema,基于XML的配置(在IoC容器中装配Bean的前奏片)

要深入了解Spring机制,首先需要知道Spring是怎样在IoC容器中装配Bean的.而了解这一点的前提是,要搞清楚Spring基于Schema的Xml配置方案. 在深入了解之前,必须要先明白几个标签的意思(我会逐步引导读者理解,刚开始的懵懂无所谓,读者自会渐入佳境.初极狭,才通人.复行数十步,豁然开朗.). 什么是XML Schema? 用来描述 XML文档的结构,也被简称为XSD(XML Schema Definition),是一些规则的集合.(方式:通过定义schema文件 如 spri

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

spring在IoC容器中装配Bean详解

1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean实例放入bean缓存池: 应用程序使用bean. 1.2.基于xml的配置 (1)xml文件概述 xmlns------默认命名空间 xmlns:xsi-------标准命名空间,用于指定自定义命名空间的schema文件 xmlns:xxx="aaaaa"-------自定义命名空间,xx

Spring的IOC容器—Bean的自动装配

我们对XML配置文件装配Bean的方式都很熟悉了,但是随着业务的复杂性,我们可能编写越来越复杂的XM配置. Spring提供了4种类型的自动装配的方式,帮助我们减少XML的配置数量.如下: byName:根据与bean的属性具有相同名字(或者ID)的其他bean进行注入 byType:   根据与bean的属性具有相同类型的其他bean进行注入 constructor:根据与bean的构造函数参数有相同类型的bean进行注入 autodetect :  首先尝试使用constructor进行注入

在IOC中装配Bean

一.基于XML的配置 采用Schema格式 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans"//默认命名空间,用于bean的定义    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//xsi标准命名空间