1.复制xml到container/annotation下
2.新建Waiter类,构造函数,初始化以及销毁函数
3.在Waiter方法体前面加上@Component
4.xml中添加组件扫描代码
5.test1测试是否创建了bean,注意,xml中没有像之前一样去配置bean的id等属性,而是扫描组件方式,注意,组件扫描方式,那么bean的id即为该类名的小写
6.test2测试单例模式下只能创建一个bean对象,在Waiter方法体前面加上@Scope("prototype"),则为false
7.在Waiter的init方法前,destroy前分别加上@PostConstruct,@PreDestroy
8.将范围重新修改为单例模式,调用ac.close,test3测试bean的生命周期
9.test4测试不实例化bean,也会预实例化bean。在Waiter前加上@Lazy(true),则不再预实例化

Water.java:

package container.annotation;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component("wt")
//@Component
//@Scope("prototype")
@Scope("singleton")
@Lazy(true)
public class Waiter {

public Waiter() {
System.out.println("Waiter的无参构造器");
}

@PostConstruct
public void init(){
System.out.println("Waiter的init方法............");
}
@PreDestroy
public void destroy(){
System.out.println("Waiter的destroy方法............");
}
}

xml:

<!-- 开启组件扫描,容器会检查container.annotation包及其子包下面的所有的类,
如果这些类包含了特定的注解,就会将其作为一个bean来进行管理 -->
<context:component-scan
base-package="container.annotation"/>

TestCase:

package container.annotation;

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

public class TestCase {

@Test
public void test1(){
String cfg = "container/annotation/applicationContext.xml";
ApplicationContext ac =
new ClassPathXmlApplicationContext(cfg);
//Waiter wt = ac.getBean("waiter",Waiter.class);
Waiter wt = ac.getBean("wt",Waiter.class);
System.out.println(wt);
}

@Test
public void test2(){
String cfg = "container/annotation/applicationContext.xml";
ApplicationContext ac =
new ClassPathXmlApplicationContext(cfg);
//id为类名首字母小写
Waiter wt = ac.getBean("waiter",Waiter.class);
Waiter wt2 = ac.getBean("waiter",Waiter.class);
System.out.println(wt==wt2);
}

@Test
public void test3(){
String cfg = "container/annotation/applicationContext.xml";
AbstractApplicationContext ac =
new ClassPathXmlApplicationContext(cfg);
Waiter wt = ac.getBean("waiter",Waiter.class);
ac.close();
}

@Test
public void test4(){
String cfg = "container/annotation/applicationContext.xml";
AbstractApplicationContext ac =
new ClassPathXmlApplicationContext(cfg);

}

}

springday02-go4的更多相关文章

  1. Spring-day02

    Annotation复习:1,Annotation:作为类型的元数据; 1,给类型加标记; 2,annotation可以添加各种类型的属性;2,Annotation的上的标记: 1),target:标 ...

  2. jQuery动画与特效详解

    本文主要是讲解和学习jQuery的自动显隐,渐入渐出等. 1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,本节简单介绍jQuery的显示和隐藏. 代码如下: &l ...

  3. OC基础--类的本质

    类的本质: 类的本质其实也是一个对象(类对象),只要有了类对象, 将来就可以通过类对象来创建实例对象 程序中第一次使用该类的时候被创建,在整个程序中只有一份.此后每次使用都是这个类对象,它在程序运行时 ...

  4. window下安装jupyter

    1.Install [Anaconda](https://docs.continuum.io/anaconda/install#anaconda-install) 实际上安装了anaconda就已经安 ...

  5. Linux Network Related Drive

    catalog . 通过套接字通信 . 网络实现的分层模型 . 网络命名空间 . 套接字缓冲区 . 网络访问层 . 网络层 . 传输层 . 应用层 . 内核内部的网络通信 1. 通过套接字通信 Lin ...

  6. 二、JavaScript语言--事件处理--DOM事件探秘

    第一章 事件流 事件:是文档或浏览器窗口中发生的.特定的交互瞬间.JavaScript和HTML之间的交互都是通过事件来实现的. 事件流:描述的是从页面中接受事件的顺序 IE:事件冒泡流 Netsca ...

  7. 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况

    异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...

  8. JQuery的动画及其幻灯片效果

    1.显示和隐藏hide()和show() 对于动画来说,显示和隐藏是最基本的效果之一,简单介绍jQuery的显示和隐藏. <script type="text/javascript&q ...

  9. 使用Python一步一步地来进行数据分析总结

    原文链接:Step by step approach to perform data analysis using Python译文链接:使用Python一步一步地来进行数据分析--By Michae ...

  10. ADF_Data Binding系列2_使用URL Service Data Control

    2015-02-16 Created By BaoXinjian

随机推荐

  1. 使用第三方分页AspNetPager实现真正分页的SQL原理

    AspNetPager是一个第三方分页第三方控件,可以和数据绑定控件(GridView等)方便的结合,实现真分页. 真分页:从数据库中获取符合要求的部分数目的记录.性能较高,数据量小,网络负载小,对数 ...

  2. Mongo中的数组操作

    当前mongo中有这么一条数据 book是一个数组,在他后面添加一条数据 { "_id" : ObjectId("5721f504d1f70435632b5ce7&quo ...

  3. oracle变量的定义和使用【转】

    在程序中定义变量.常量和参数时,则必须要为它们指定PL/SQL数据类型.在编写PL/SQL程序时,可以使用标量(Scalar)类型.复合(Composite)类型.参照(Reference)类型和LO ...

  4. 帝国CMS备忘

    一. 2级导航: 类似下图这种导航: 实现方式如: 1. 定义一个标签模板,记住ID,具体内容如: 页面模板内容: <li><a href=”[!—bclassurl—]”>[ ...

  5. python入门 2014-3-21

    刚吃完饭,写一会python 准备去上课,哇咔咔! 1.python是动态类型语言,也就是说 不需要预先声明变量的类型. 不支持 自增++ , 自减--

  6. iOS UPYUN(又拍云)使用总结

    UPYUN,原来没用过,上个周用了一次,觉得蛮方便的,对于个人开发者,且没有服务器的,上传图片和文件,是个不二选择. 首先,先明白原理: 1.又拍云有一个上传空间,在这个空间里,有空间名称.密钥,其他 ...

  7. 【转】flash不建议设置wmode及wmode解释

    flash不建议设置wmode及wmode解释 2011-11-21 16:57:57|  分类: flash cs3 AS3.0|举报|字号 订阅     转自:http://www.webryan ...

  8. iOS 并发编程之 Operation Queues

    现如今移动设备也早已经进入了多核心 CPU 时代,并且随着时间的推移,CPU 的核心数只会增加不会减少.而作为软件开发者,我们需要做的就是尽可能地提高应用的并发性,来充分利用这些多核心 CPU 的性能 ...

  9. 破解Mysql数据库密码

    破解Mysql数据库密码 点我,点我,破解mysql数据库密码:

  10. 如何在 Linux 中清除缓存(Cache)

              如何在 Linux 中清除缓存(Cache)            方法一: http://mp.weixin.qq.com/s?__biz=MjM5ODAzODgyMQ==&am ...