java JSP开发之Spring中Bean的使用
作者:lqh 发布时间:2023-06-16 07:35:08
java JSP开发之Spring中Bean的使用
在传统的Java应用中,bean的生命周期很简单。使用Java关键字new进行bean实例化,然后bean就可以被使用了,一旦该bean不再使用,Java就自动进行垃圾回收。然而,在Spring中,bean的生命周期就比较复杂了。下面是一个bean装载到Spring应用上下文的过程:
如图所示:在你准备调用bean之前,bean工厂执行了若干启动步骤:
1.Spring对bean进行实例化;
2.Spring将值和bean的引用注入到bean对应的属性中;
3.如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;
4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来;
6.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;
7.如果bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法。类似地,如果bean使用initmethod声明了初始化方法,该方法也会被调用;
8.如果bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;
9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
10.如果bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
一,创建可以被发现的Bean
在厨师的眼中,一套好的刀是必不可少的,它能够将平淡的食物素材加工成精致的艺术品。
package cooking;
public interface knife{
void cut();
}
现在,我们创建一个名为knife(刀)的接口,它拥有cut(切)的功能。接下来我们实现这个接口
package cooking
@Component
public class beef implements knife{
private int weight = 2;
private double price = 32.1;
public void cut(){
System.out.println(“This is perfect beef”,+“weight:”+weight
+“kg”+“,”+“It's price is”+price+"$");
}
}
请注意,我们在beef类上使用了@Component注解。这个简单的注解表明 该类是一个组件类,并告诉Spring要为这个类创建bean。
在默认情况下,组件扫描是不启用的,我们需要显示配置一下Spring,命令Spring去寻找带有@Component注解的类,并为其创建bean
package cooking
@Configuration
@ComponentScan
public class knifeConfig{
}
注意到,在knifeConfig类上加上了@ComponentScan注解,该注解能够在Spring中开启组件扫描,如果没有其他配置的话,@ComponentScan默认会扫描与配置类相同的包,去查找带有@Component的注解类,并在Spring中自动为其创建一个bean。如果你更倾向于使用XML来启用组件扫描的话,那么可以使用Spring context命名空间的<context:component-scan>元素。
<context:component-scan base-package="cooking"/> 该标签会开启组件扫描,去cooking包下寻找带有@Component的注解类。
来源:http://www.cnblogs.com/Dantes-Tang/p/7289362.html


猜你喜欢
- jquery模拟SELECT框,效果图如下: <!DOCTYPE html> <html lang="
- 任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go 的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。
- 安装完Python,在命令行输入“python”之后,如果成功,会得到类似于下面的窗口:可以看到,结尾有3个>符号(>>&
- 1. 内连接内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。说人话就是,查询结果只包含它们匹配的行,不匹
- <%dim total(7,1) total(1,0)="中国经营报"
- Heroku是一个很棒的平台,它有很多的控件,并且搭建环境相对来说也比较容易。本指南中,我将一步一步指导你在Heroku平台上部署一个简单地
- 一、JDBC概述JDBC全称Java Database Connectivity,它是一个独立于特定数据库管理系统、通用的SQL数据库存取和
- python类class定义及其初始化定义类,功能,属性一般类名首字母大写class Calculator:#名字和价格是属性
- 一:关于MySQL5 MySQL5系列数据库是MySQL的最新版本的数据库,比较流行的发行版是mysql-5.0.18。MySQL 英文官方
- Go pongo2 教程展示了如何使用 pongo2 模板引擎在 Golang 中使用模板。模板引擎是一个库,旨在将模板与数据结合起来以生成
- “选项卡”经常会被混同为“滑动门”,滑动门只是一种背景自适应内容的实现方法,不只可以应用在导航菜单,一样也可以应用在其他地方。例如选项卡中就
- 在进制学习时候,细心的小伙伴不免都发现unicher函数的存在,没错能够经常看到的,也就是关于进制的转化,那肯定有小伙伴要开心起来了,因为进
- 1.检查mysql是否安装yum list installed | grep mysql如果有的话 就全部卸载yum -y remove +
- 1 非贪婪flag>>> re.findall(r"a(\d+?)", "a23b"
- MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(
- 最近 全栈数据工程师养成攻略 的微信群已经将近500人,开了二群之后为了打通不同微信群之间的消息,花了点时间做了个消息同步机器人,在任意群收
- 前言上篇文章 一文了解 Go 标准库 strings 常用函数和方法 介绍了 strings 标注库里的一些常用的函数和方法,本文也是以 s
- 本项目利用python以及opencv实现信用卡的数字识别前期准备导入工具包定义功能函数模板图像处理读取模板图像 cv2.imread(im
- 在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。首先,我们对CSS作一个简单的说明:CSS是层叠样式表(Cascadi
- 利用递归的方法循环树形数组,当遇到有children的对象再次调用递归函数循环children数组,每次循环的数据放入一个提前声明好的数组里