Spring学习总结五——SpringIOC容器五
一: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容器五的更多相关文章
- Spring学习总结四——SpringIOC容器四
一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...
- Spring学习总结三——SpringIOC容器三
一:spring容器自动装配注入 为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在 bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX() ...
- Spring学习总结二——SpringIOC容器二
一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Example ...
- Spring学习总结一——SpringIOC容器一
什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...
- Java 系列之spring学习--springmvc注解方式(五)
一.springmvc注解方式 注解方式使用的更多,更加灵活.在上一篇的博客的基础上修改springmvc-servlet.xml配置文件. <?xml version="1.0&qu ...
- 三、spring成长之路——springIOC容器详解(上)
目录 一.springIOC 一.springIOC 控制反转和依赖注入: 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...
- 四、spring成长之路——springIOC容器(下)
目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...
- Spring学习之旅(二)--容器
在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...
- Spring学习记录1——IoC容器
IoC容器 1.1 IoC概述 Ioc(Inverse of Control,控制反转)是Spring容器的内核.对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由 ...
随机推荐
- Py2.7 no module named tkinter
一个简单的例子 #! /usr/bin/env python#coding=utf-8from tkinter import *Label(text="Spam").pack()m ...
- Java并发编程:Lock和Synchronized <转>
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方 ...
- slf4j+log4j2 pom配置
<!-- log start --> <dependency> <groupId>org.slf4j</groupId> <artifactId& ...
- java 、HashMap 和单例
前段时间在项目中遇到一个问题.当多个系统同时运行时,大部分系统能够良好运转,部分却卡死在了启动界面.以下是我解决该问题的步骤和总结: 1.复现问题.重新走了一遍出问题的过程,发现问题的确存在.说明 ...
- 关于Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (五)
有关我们这个项目:智能自然语言交流系统,所借鉴的技术有: 第一:我们使用了科大讯飞的在线语音转换,涉及的有文本传给云端服务器的文字转换成语音和本地的语音上传给服务器转换成文字. 涉及的相关的代码有: ...
- MY_使用selenium自动登录126/163邮箱并发送邮件
转自:https://www.cnblogs.com/yin-tao/p/7244082.html 我使用的是python2.7.13+selenium ps:几天之前,我曾多次尝试写这段代码,但是在 ...
- Ogre 编辑器三(自动生成与更新Ogre对象编辑界面)
最开始设计这个编辑器时,其中一个要求就是能在运行过程中,通过UI来更新各对象,这样我们就能明确每个Ogre对象更新其属性影响的渲染效果.比如点光源,方向光源,聚光灯各属性与效果,深度测试开启与关闭,深 ...
- TPshop隐藏index.php
有些朋友提到关于TPshop 隐藏index.php 一问题, 可以修改 Application\Common\Conf\config.php 文件代码 'common', 'AUTH_CODE' = ...
- Android开发之获取相册照片和获取拍照照片二
转至 http://blog.csdn.net/beyond0525/article/details/8940840 上一篇文章中讲解了照相机获取照片的时候遇到了可能取得的uri为null的状态,并给 ...