1、Spring管理Bean,实例化Bean对象 三种方式

第一种:使用类构造器实例化(默认无参数)

 package cn.itcast.spring.initbean;

 /**
* 使用构造方法 实例化
*
* @author seawind
*
*/
public class Bean1 { } <!-- Bean 实例化第一种 方式 构造器 -->
<bean id="bean1" class="cn.itcast.spring.initbean.Bean1"></bean>

第二种:使用静态工厂方法实例化(简单工厂模式)

 package cn.itcast.spring.initbean;
/**
* 使用静态工厂方法进行Bean 实例化
*
* @author seawind
*
*/
public class Bean2 { } package cn.itcast.spring.initbean;
// 工厂类
public class Bean2Factory {
public static Bean2 getBean2() {
return new Bean2();
}
} <!-- Bean 实例化第二种 方式 静态工厂方法 -->
<bean id="bean2" class="cn.itcast.spring.initbean.Bean2Factory" factory-method="getBean2" />

第三种:使用实力工厂方法实例化(工厂方法模式)

 package cn.itcast.spring.initbean;
/**
* 通过实例 工厂方法进行构造
*
* @author seawind
*
*/
public class Bean3 { } package cn.itcast.spring.initbean;
public class Bean3Factory {
public Bean3 getBean3() {
return new Bean3();
}
} <!-- Bean 实例化 第三种 方式 实例工厂方法 -->
<bean id="bean3factory" class="cn.itcast.spring.initbean.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean>

测试三种方式

 package cn.itcast.spring.initbean;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* 实例化 Bean 三种方式
*
* @author seawind
*
*/
public class SpringTest {
@Test
// 实例工厂方法 实例化 Bean
public void demo3() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
System.out.println(bean3);
} @Test
// 使用 静态工厂方法实例化Bean
public void demo2() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");
System.out.println(bean2);
} @Test
// 使用Bean 的构造方法 实例化Bean
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
// Spring3 集合 JDK5 泛型特性
Bean1 bean1 = applicationContext.getBean("bean1", Bean1.class); System.out.println(bean1);
}
}

 2、Bean的id属性和name属性

在使用Spring 配置Bean
    <bean id="helloService" class=".....HelloService" />
    <bean name="helloService" class="....HelloSerivce" />

* 在配置Bean过程中 id 属性 和 name 属性 都行 ,都可以通过 applicationContext.getBean(id/name) 来获得一个Bean实例

配置id 必须唯一,通常不含有特殊字符, 比如以/开始,以数字开始
配置name 属性,不必须唯一, 可以含有特殊字符

*  为什么要有name属性 ?
    比如 struts1 整合 spring 需要将 请求路径 配置到spring 中
        <bean id="/login" class="..... UserAction" />  ------ 在早期Spring版本 是报错的
        <bean name="/login" class="..... UserAction" /> ------ 以前整合都是这样写的

3、 Bean的作用域
在配置 <bean> 元素时, 通过 scope 属性 指定 Bean的作用域
    singleton : 代表Bean 在整个Spring 容器环境中 是单例的
    prototype : 多例 (原型模式) , 在一个Spring 容器中,每次使用Bean 都会返回一个新的实例
    request : 相当于 构造对象,保存request数据范围 (request.setAttribute())
    session : 相当于 构造对象,保存session数据范围 (session.setAttribute()) 以后再次使用,同一个Session无需构造

* 在实际开发中 只需要掌握 singleton 和 prototype 就可以了 ----- 默认值是 singleton

4、Bean 生命周期
在配置 <bean> 通过 init-method destroy-method 定义Bean的初始化 和 销毁的方法

   applicationContext.xml: <bean id="product" class="cn.itcast.spring.lifecycle.Product" init-method="myinit" destroy-method="mydestroy"></bean>

     public class Product {
public Product() {
System.out.println("执行 Product的 构造 ...");
} public void myinit() {
System.out.println("Product对象初始化....");
} public void mydestroy() {
System.out.println("Product对象销毁....");
}
} @Test
// 配置 init-method 和 destroy-method 执行 bean 的初始化和销毁 方法
public void demo1() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
Product product = (Product) applicationContext.getBean("product");
System.out.println(product); // 如果销毁 Spring 手动 调用 close方法
applicationContext.close();
}

aaarticlea/png;base64,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" alt="" />

有构造方法,为什么要有init ?

  java语言不建议在构造器 编写复杂处理逻辑,通常在构造器 只会成员变量赋值。初始化

完整Bean的生命周期
    1) instantiate bean对象实例化
    2) populate properties 封装属性(setXxxx方法执行)
    3) 如果Bean实现BeanNameAware 执行 setBeanName(String beanName)
    4) 如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext

      * void setApplicationContext(ApplicationContext applicationContext)
    5) 如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
    6) 如果Bean实现InitializingBean 执行 afterPropertiesSet
    7) 调用<bean init-method="init"> 指定初始化方法 init
    8) 如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
    9) 执行业务处理
    10)如果Bean实现 DisposableBean 执行 destroy
    11)调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy

    3) 4) 知识点: 让Bean 了解Spring 容器
    5) Bean的后处理器 BeanPostProcessor ,该类成为Bean的后处理器
        * 后处理Bean 可以对 已经创建 Bean对象 进行代理增强

 package cn.itcast.spring.lifecycle;

 // 定义业务接口

 public interface CustomerService {
public void addCustomer();
} package cn.itcast.spring.lifecycle; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; // CustomerService 一个实现类
public class CustomerServiceImpl implements CustomerService, BeanNameAware,
ApplicationContextAware, InitializingBean, DisposableBean {
private String name; // 第一步
public CustomerServiceImpl() {
System.out.println("第一步 Bean的构造器执行....");
} @Override
public void addCustomer() {
// 第九步 执行业务操作
System.out.println("第九步 ,使用业务Bean 执行业务操作....");
System.out.println("添加客户");
} // 第二步
public void setName(String name) {
System.out.println("第二步 属性依赖注入....");
this.name = name;
} @Override
// 第三步,如果 Bean 实现 BeanNameAware, Spring 就会将 <bean> 配置 id 属性 、name 属性 注入
public void setBeanName(String beanName) {
System.out.println("第三步 获得当前Bean在Spring 注册 Bean 名字 :" + beanName);
} @Override
// 第四步 如果 Bean 实现 ApplicationContextAware, Spring 就会将Spring 应用上下文 注入给 Bean
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
System.out.println("第四步 获得当前 Spring上下文 :" + applicationContext);
// 通过该对象 操作其它Bean
} @Override
// 第六步
public void afterPropertiesSet() throws Exception {
System.out.println("第六步 属性封装完成 ....");
} // 第七步 通过配置文件,指定初始化方法
public void myinit() {
System.out.println("第七步 自定义初始化方法...");
} @Override
// 第十步 释放资源
public void destroy() throws Exception {
System.out.println("第十步, 不需要配置 调用释放资源方法");
} // 第十一步
public void mydestroy() {
System.out.println("第十一步 自定义 释放资源方法");
} } package cn.itcast.spring.lifecycle; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; // 自定义 一个 Bean的 后处理器 public class MyBeanPostProcessor implements BeanPostProcessor { @Override
// 提供两个方法,用户通过实现 两个方法,对原有Bean 进行增强
// 第八步
/**
* beanName 就是 配置文件 <bean> id 属性
* bean 增强前对象
*/
public Object postProcessAfterInitialization(final Object bean,
String beanName) throws BeansException {
System.out.println("第八步 BeanPostProcessor 后处理Bean 初始化完成后增强....");
// 通过beanName 判断要对哪个Bean 进行代理增强
if (beanName.equals("customerService")) {
// 增强
return Proxy.newProxyInstance(bean.getClass().getClassLoader(),
bean.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
if (method.getName().equals("addCustomer")) { // 增强
System.out
.println("增强addCustomer=======================================");
} // 不增强
return method.invoke(bean, args);
}
});
}
return bean;
} @Override
// 第五步
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("第五步BeanPostProcessor 后处理Bean 初始化完成前增强... ");
return bean;
} } @Test
// 通过CustomerService 来理解Bean 的生命周期
public void demo2() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
CustomerService customerService = (CustomerService) applicationContext
.getBean("customerService");
customerService.addCustomer(); applicationContext.close();
} <!-- 可以配置Bean 初始化和销毁 调用方法 -->
<bean id="customerService" class="cn.itcast.spring.lifecycle.CustomerServiceImpl" init-method="myinit" destroy-method="mydestroy">
<property name="name" value="张三"></property>
</bean> <!-- 配置后处理Bean ,不需要为Bean 指定id ,会对所有Bean 产生作用 -->
<bean class="cn.itcast.spring.lifecycle.MyBeanPostProcessor"></bean>

结果:

aaarticlea/png;base64,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" alt="" />

IoC容器装配Bean(xml配置方式)(Bean的生命周期)的更多相关文章

  1. Spring框架(2)---IOC装配Bean(xml配置方式)

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  2. 【spring源码学习】spring的IOC容器之自定义xml配置标签扩展namspaceHandler向IOC容器中注册bean

    [spring以及第三方jar的案例]在spring中的aop相关配置的标签,线程池相关配置的标签,都是基于该种方式实现的.包括dubbo的配置标签都是基于该方式实现的.[一]原理 ===>sp ...

  3. spring Ioc容器之使用XML配置Bean

    1.项目截图 2.创建xml文件 3.打印机接口 package com.example.demo.computerTest; public interface Printer { void init ...

  4. Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析

    Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML ...

  5. bean.xml配置数据源和读取配置文件配置数据源

    一.bean.xml配置数据源 bean.xml装配bean,依赖注入其属性的时候,对应实体类中属性一定要有set方法, 二.读取配置文件配置数据源 1.配置文件 bean.xml配置: classp ...

  6. Bean XML 配置(4)- 自动装配

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  7. Bean XML 配置(3)- 依赖注入配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  8. Bean XML 配置(2)- Bean作用域与生命周期回调方法配置

    系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...

  9. Bean XML 配置(1)- 通过XML配置加载Bean

    系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...

  10. Spring IOC 容器源码分析 - 创建原始 bean 对象

    1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...

随机推荐

  1. Java程序员最常用的8个Java日志框架

    转自:http://www.codeceo.com/article/8-java-log-framework.html 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用.WEB应用 ...

  2. 操作SQLite数据库

    本文摘自: http://docs.blackberry.com/en/developers/deliverables/25108/Creating_and_deleting_SQLite_datab ...

  3. 关于LR中的EXTRARES

    LoadRunner脚本之EXTRARES参数 EXTRARES:分隔符,表示标记下一个属性是资源属性的列表(list of resource attributes). [EXTRARES后的资源是由 ...

  4. JVM常用参数配置

    Trace跟踪参数 -verbose:gc -XX:+printGC 打印GC的简要信息 -XX:+PrintGCDetails 打印GC详细信息 -XX:+PrintGCTimeStamps 打印C ...

  5. Oracle TNS配置浅析

    1. 什么是TNS? TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置T ...

  6. 排序+逆向思维 ACdream 1205 Disappeared Block

    题目传送门 /* 从大到小排序,逆向思维,从最后开始考虑,无后向性 每找到一个没被淹没的,对它左右的楼层查询是否它是孤立的,若是++,若不是-- 复杂度 O(n + m),还以为 O(n^2)吓得写了 ...

  7. DataMember IsRequired属性

        1.简介 在数据契约中,如果需要序列化时,则需要传入指定IsRequired属性:   摘要: 获取或设置一个值,该值用于指示序列化引擎在读取或反序列化时成员必须存在.   public bo ...

  8. ZOJ2332 Gems(最大流)

    题目大概说,alsomagic有宝石,宝石有颜色和形状两个属性:他有一种法力可以将某些颜色形状的宝石转化成另一种颜色形状的宝石:他的女朋友对各个颜色都有一定的容忍数量,而他自己也对各个形状都有一定的容 ...

  9. c++ map 的使用

    1.map是一类关联式容器,它是模板类. 关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置类获取.它的特点是增加和删除节点对迭代器的影响很小,除了操作节点,对其他的节点都没有什 ...

  10. Linux下MySQL的备份与还原

    Linux下MySQL的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [roo ...