一:spring组件扫描

可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置

文件中配置<context:component-scan base-package="com.hlcui.*"/>

但是不是只有扫描,所在包以及子包下的类都会被扫描进去,而是只有类上面标记注解的才会被扫描进spring容器

常见注解:
@Component  通用注解,  一般情况下不确定属于那一层时使用,它仅仅是将类对象扫描到spring容器中

@Repository   持久层注解,放在dao那一层

@Service        业务层注解,放在service那一层

@Controller     控制车注解,放在控制层

下面示例演示:

1:新建TestBean类,在类上面添加注解 @Component

 /**
*
*/
package com.hlcui.dao; import org.springframework.stereotype.Component; /**
* @author Administrator
*
*/
@Component
public class TestBean {
public TestBean() {
System.out.println("实例化bean...");
} public void execute() {
System.out.println("执行bean处理...");
}
}

2:在配置文件中添加

 <!-- 组件扫描 -->
<context:component-scan base-package="com.hlcui"/>

3:测试方法

 @Test
/**测试组件扫描*/
public void testTestBean(){
ApplicationContext ac = getApplicationContext();
TestBean tb = ac.getBean("testBean", TestBean.class);
tb.execute();
}

通过结果可以看出bean对象被扫描进了spring容器!

二:控制bean的实例化

1:创建ExampleBean1类,并且在类上面添加注解标记@Component

/**
*
*/
package com.hlcui.dao;
import org.springframework.stereotype.Component; /**
* @author Administrator
*
*/
@Component
public class ExampleBean1 {
public ExampleBean1() {
System.out.println("实例化ExampleBean1...");
}
}

2:运行测试方法

 @Test
/**测试组件扫描模式下控制bean的实例化*/
public void testExampleBean1(){
ApplicationContext ac = getApplicationContext();
ExampleBean1 tb1 = ac.getBean("exampleBean1", ExampleBean1.class);
ExampleBean1 tb2 = ac.getBean("exampleBean1",ExampleBean1.class);
System.out.println(tb1 == tb2);
}

根据结果可以看出默认情况下,是单例模式,虽然调用两次,但是是同一个对象!

3:在类上面添加@Scope("prototype")注解,然后在运行测试方法

可以看出创建了两个对象!

如果在将@Scope修改为singleton时,那么又会是单例模式了。

3:初始化和销毁对象

@postConstruct和@preDestroy两个注解,它们的作用就相当于在配置文件的bean元素中

添加init-method方法和destroy-method方法

 /**
*
*/
package com.hlcui.dao;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component; /**
* @author Administrator
*
*/
@Component
@Scope("prototype")
public class ExampleBean1 { public ExampleBean1() {
System.out.println("实例化ExampleBean1...");
} @PostConstruct
public void init(){
System.out.println("初始化ExampleBean1...");
} @PreDestroy
public void destroy(){
System.out.println("销毁ExampleBean1...");
}
}

Spring学习总结五——SpringIOC容器五的更多相关文章

  1. Spring学习总结四——SpringIOC容器四

    一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...

  2. Spring学习总结三——SpringIOC容器三

    一:spring容器自动装配注入 为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在 bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX() ...

  3. Spring学习总结二——SpringIOC容器二

    一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Example ...

  4. Spring学习总结一——SpringIOC容器一

    什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...

  5. Java 系列之spring学习--springmvc注解方式(五)

    一.springmvc注解方式 注解方式使用的更多,更加灵活.在上一篇的博客的基础上修改springmvc-servlet.xml配置文件. <?xml version="1.0&qu ...

  6. 三、spring成长之路——springIOC容器详解(上)

    目录 一.springIOC 一.springIOC 控制反转和依赖注入: ​ 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...

  7. 四、spring成长之路——springIOC容器(下)

    目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...

  8. Spring学习之旅(二)--容器

    在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...

  9. Spring学习记录1——IoC容器

    IoC容器 1.1  IoC概述 Ioc(Inverse of Control,控制反转)是Spring容器的内核.对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由 ...

随机推荐

  1. Redis入门很简单之六【Jedis常见操作】

    Redis入门很简单之六[Jedis常见操作] http://www.tuicool.com/articles/vaqABb http://www.cnblogs.com/stephen-liu74/ ...

  2. [数据结构]图的DFS和BFS的两种实现方式

    深度优先搜索 深度优先搜索,我们以无向图为例. 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似. 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发, ...

  3. 快速掌握Vue.js使用【转】

    Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...

  4. Hadoop HDFS分布式文件系统 常用命令汇总

    引言:我们维护hadoop系统的时候,必不可少需要对HDFS分布式文件系统做操作,例如拷贝一个文件/目录,查看HDFS文件系统目录下的内容,删除HDFS文件系统中的内容(文件/目录),还有HDFS管理 ...

  5. [技术选型] dubbo

    分布式服务架构 - 阿里开源项目 简介 Dubbo架构设计详解 Dubbo与Zookeeper.SpringMVC整合和使用(负载均衡.容错)

  6. Chrome 各版本下载集合

    Windows平台: Chrome 在线安装包: 最新稳定版(Stable Channel)Chrome在线安装: [点击这里] 最新测试版(Beta Channel)Chrome在线安装: [点击这 ...

  7. Hadoop开发相关问题

    总结自己在Hadoop开发中遇到的问题,主要在mapreduce代码执行方面.大部分来自日常代码执行错误的解决方法,还有一些是对Java.Hadoop剖析.对于问题,通过查询stackoverflow ...

  8. 【原创】在VS2012中采用C++中调用DLL中的函数(4)

    这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...

  9. Union和Union All的区别[转]

    来源:http://blog.csdn.net/wanghai__/article/details/4712555/ 假设我们有一个表Student,包括以下字段与数据: drop table stu ...

  10. C++标准 bind函数用法与C#简单实现

    在看C++标准程序库书中,看到bind1st,bind2nd及bind的用法,当时就有一种熟悉感,仔细想了下,是F#里提到的柯里化.下面是维基百科的解释:在计算机科学中,柯里化(英语:Currying ...