一: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. 俞军的PM12条

     俞军的PM12条:1.PM首先是用户2.站在用户角度看待问题3.用户体验是一个完整的过程4.追求效果,不做没用的东西5.发现需求,而不是创造需求6.决定不做什么,往往比决定做什么更重要7.用户是很难 ...

  2. go channel例子

    channel初步认识: package main import "fmt" import "time" func main() { c := make(cha ...

  3. SpringBoot2 添加应用拦截器

    项目参考:详细参见:<Spring Boot 2精髓:从构建小系统到架构分布式大系统> 第三章 3.6.1节 拦截器 MyWebMvcConfigurer package com.arch ...

  4. 2012Hulu校园招聘笔试题

    一.填空 侧重逻辑思维,没有语言.具体技术考察,大部分属于组合数学.算法.比较基本的知识点有二元树节点树.最小生成树.Hash函数常用方法等. 二.编程题 1.正整数剖分 2.AOE关键路径 3.二元 ...

  5. 微信小程序——自定义导航栏

    微信头部导航栏可能通过json配置: 但是有时候我们项目需求可能需要自定义头部导航栏,如下图所示: 现在具体说一下实现步骤及方法: 步骤: 1.在 app.json 里面把 "navigat ...

  6. 微信中关闭网页输入内容时的安全提示 [干掉 “防盗号或诈骗,请不要输入QQ密码”]

    未设置之前: 需要把域名加入白名单 设置方法:微信公共平台后台-->公众号设置--->功能设置--->填写业务域名即可.

  7. Genymotion 解决虚拟镜像下载速度特别慢的问题[转]

    Genymotion下载地址(需注册账号):https://www.genymotion.com/download/ Genymotion号称Android模拟器中运行最快的,但是服务器在国外,And ...

  8. CSS2.0中最常用的18条技巧

    一.使用css缩写 使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.  具体内容请浏览:CSS常用缩写语法 二.明确定义单位,除非值为0. 忘记定义尺寸的单位是CSS新手普遍的错误.在HTML中 ...

  9. hashMap put方法 第二行代码 1

    public interface Zi<K,V> { //我是接口 //通过Zi<K,V> zi的方式可以让我实现多态 //多态的好处是: //1. 应用程序不必为每一个派生类 ...

  10. (笔记)Mysql命令select:当前选择(连接)的数据库

    select命令表示当前选择(连接)的数据库. select命令格式:mysql> select database(); MySQL中SELECT命令类似于其他编程语言里的print或者writ ...