bean的autowire属性及其生命周期
一:sutowire属性
1、no:默认值,禁用自动装配;
2、byName:根据属性名称自动装配;
3、byType:根据属性类型自动装配;
4、constructor:通过构造方法自动装配,不推荐使用;
//创建两个类
package com.zzj.vo;
public class Student { private int age; public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} } package com.zzj.vo; public class School {
private Student student; public Student getStudent() {
return student;
} public void setStudent(Student student) {
this.student = student;
} }
byName模式(属性的名称必须与之对应否则会报错)
<!--byName模式id与之匹配-->
<bean id="student" class="com.zzj.vo.Student">
<property name="age" value="12"></property>
</bean> <bean class="com.zzj.vo.School" autowire="byName"></bean>
byType模式(不需要属性名)
<!--byType模式-->
<bean class="com.zzj.vo.Student">
<property name="age" value="12"></property>
</bean> <bean class="com.zzj.vo.School" autowire="byType"></bean>
//测试
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
System.out.println(context.getBean(School.class).getStudent().getAge());
二:bean的生命周期
通过构造方法或工厂方法创建bean对象——>为bean属性赋值——>调用 bean 的初始化方法,即init-method指定方法——>bean实例化完毕,可以使用——>容器关闭, 调用 bean 的销毁方法,即destroy-method指定方法。
init-method:在设置bean的属性后执行的自定义初始化方法,注意:①、该方法不能有参数;②、对象每创建一次就会执行一次该方法;
destroy-method:该参数中的方法只有bean标签属性scope为singleton且关闭SpringIOC容器时才会被调用,注意:该方法不能有参数
下面我们创建一个类来观察init开始的时间以及destroy结束的时间
//Student类
package com.zzj.vo; public class Student { private int age; static{
System.out.println("静态代码块");
} {
System.out.println("非静态代码块");
} public Student(){
System.out.println("构造方法");
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
System.out.println("set后");
} public void init(){
System.out.println("init");
} public void destroy(){
System.out.println("destroy");
}
}
<!--applicaton.xml中的代码-->
<bean id="stu" class="com.zzj.vo.Student" init-method="init" destroy-method="destroy" p:age="12"></bean>
//测试
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
System.out.println(context.getBean(Student.class).getAge());
context.close();
测试结果如下(可见init是在set后开始的):
三:继承 parent属性
parent属性:子bean 从父bean 中继承配置;子bean 也可以覆盖从父bean 继承过来的配置;注意:该属性不允许配置多个值。
//子类(Son)和父类(Parent)
package com.zzj.vo; public class Parent {
private int grade;
private String name;
private String city;
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
} } package com.zzj.vo; public class Son {
private int grade;
private String name;
private String city;
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Son [grade=" + grade + ", name=" + name + ", city=" + city + "]";
}
}
<!--application.xml-->
<bean id="parent" class="com.zzj.vo.Parent">
<property name="grade" value="1"></property>
<property name="city" value="郑州市"></property>
<property name="name" value="Tom"></property>
</bean> <bean id="son" class="com.zzj.vo.Son" parent="parent">
<property name="name" value="Jesse"></property>
</bean>
//测试
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
System.out.println(context.getBean(Son.class));
结果如下(可见子类继承了父类的配置,并可作出更改):
bean的autowire属性及其生命周期的更多相关文章
- Spring - bean的autowire属性(自动装配)
当我们要往一个bean的某个属性里注入另外一个bean,我们会使用<property> + <ref/>标签的形式.但是对于大型项目,假设有一个bean A被多个bean引用注 ...
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 无论学 ...
- Vue01 vue基础、mvvm、ES6z知识点、计算属性、生命周期
Vue案例: <body> <div id="app"> <!--第一部分--> <fieldset> <legend> ...
- react学习记录(三)——状态、属性、生命周期
react的状态state React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM) class Clock extends React.Compon ...
- Vue实例属性/方法/生命周期
一 实例属性 var app = new Vue(); app.$el ===>返回当前挂在DOM对象. app.$data ===>返回当前实例data里面的数据 app.$option ...
- DataSnap控件TDSServerClass属性LifeCycle生命周期管理(From李维)
DelphiXE2中的DataSnap中提供了三种不同的生命周期,开发人员可以在TDSServerClass控件的LifeCycle特性中设定,下面分别说明每一种生命周期的意义 1. Server:在 ...
- bean在容器上的生命周期
初始化两种方法: 1,使用init-method属性指定那个方法在bean依赖关系设置好后自动执行. 2,实现initializingBean接口 实现 ...
- 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
参考网址:http://blog.csdn.net/zhanglianpin/article/details/41575849 绝对的经典.
- Spring之BeanFactory及Bean生命周期
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...
随机推荐
- KNN-学习笔记
仅供学习使用 练习1 # coding:utf-8 # 2019/10/16 16:49 # huihui # ref: import numpy as np from sklearn import ...
- ATT&CK实战系列——红队实战(一)
一.环境搭建 1.环境搭建测试 最近想要开始学习内网渗透,搜集了一些教程,准备先实验一个vulnstack靶机,熟悉一下内网渗透操作再学习基础知识. 靶场下载地址:http://vulnstack.q ...
- windows 创建软连接
mklink /d D:\www\child.ivyoffline\common\components\policy D:\www\child.ivyoffline\appOA\protected\c ...
- 「NOIP2009」Hankson 的趣味题
Hankson 的趣味题 [内存限制:$128 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 Hanks 博士是 BT(Bio-Tec ...
- 2018 蓝桥杯省赛 B 组模拟赛
C. 结果填空:U型数字 最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增.比如 212 就是一个U型数字,但是 333, 98, 567, 3131,就是 ...
- C# FileStream 对象的Seek()方法-----转载
原创 kevin617 发布于2010-12-08 11:22:00 阅读数 8630 收藏展开 FileStream 可以随机读写文件 使用 Seek 方法 Seek() ----------有两 ...
- 随机序列[SHOI2016](找规律+线段树)
传送门 这道题的题意就是给你n个数让你在每个数之间插入+.-.*三种运算符中的一种,然后算出一个答案,再把答案加起来. 这题肯定是不能暴力的(题目都告诉你了由3n-1种结果).我们先从小的情况枚举找一 ...
- 【剑指Offer面试编程题】题目1521:二叉树的镜像--九度OJ
题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点 ...
- 关于req.params、req.query、req.body等请求对象
请求对象,通常传递到回调方法,这意味着你可以随意命名,通常命名为 req 或 request . 请求对象中最常用的属性和方法有: req.params 一个数组,包含命名过的路由参数. req.pa ...
- mui搜索框在ios平台上点击多次才弹出键盘的解决方法
今天使用Hbuilder调试手机端时,发现搜索框在安卓系统下,点击一次就可以弹出键盘 但是在iso下非常的不规律,要点击多次 代码实现如下: <div class="mui-input ...