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. WIN10 ANDROIDSTUDIO1.2 安装完首次启动报错

    环境 ACER NOTEBOOK  WIN10 ANNDROID 1.2 解决方案: 在Android Studio安装目录下的 bin 目录下,找到 idea.properties 文件,在文件最后 ...

  2. docker confluence

    http://wuyijun.cn/shi-yong-dockerfang-shi-an-zhuang-he-yun-xing-confluence/ https://hub.docker.com/r ...

  3. 常见的Mule Esb下载地址

    http://www.myexception.cn/open-source/1832157.html

  4. 一个高度压缩的bit位图字典的实现

    微软实现的字典功能简单方便,出于全局性考虑,其内部实现比较复杂,在对海量数据处理时,仅仅存放一个对象地址就将占据32个bit(64位机器中占据64个bit),而且其内部通过int[]来处理hash桶, ...

  5. C#中集合汇总

    平时敲代码,只关注如何使用,没有深入去研究一些本质性的东西,靠死记硬背,不去真正理解,其实最后是很难记住的. 对于C#常见的集合,自己平时好像只有用到List,Dictionary,ArrayList ...

  6. Ubuntu-1404 GDB 调试C++报错

    问题 Ubuntu1404下,当用GDB调试C++程序时,报错ImportError: No module named 'libstdcxx' 解决办法 vim ~/.gdbinit #~/.gdbi ...

  7. 【C++】函数指针宏定义

    看耗子叔文章学习虚函数表(http://blog.csdn.net/haoel/article/details/1948051)的时候被例子的第一句惊到了 typedef void(*Fun)(voi ...

  8. 【转】使用git、git-flow与gitlab工作

    转自:http://www.tuicool.com/articles/BZJRj2 使用git.git-flow与gitlab工作 时间 2013-11-02 00:40:39  Axb的自我修养 原 ...

  9. @Mybatis传多个参数

    首选还是按照面向对象的方式执行sql.但是有时候入参对象嵌套的比较深,类中有类,面向对象就不太好处理了 主要有以下两种方式 1.DAO层的函数方法 public User selectUser(Str ...

  10. java时间戳转date(转)

    1.时间戳的定义 时间戳(timestamp),通常是一个数字序列,唯一地标识某一刻的时间,指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起 ...