Spring4.1.4 bean的加载与赋值
来源:互联网 发布:win10关闭网络唤醒 编辑:程序博客网 时间:2024/06/10 20:37
既然是学习,那么我们就从spring的基础开始。对于本篇了解了的朋友可以提提意见,不了解的朋友就顺带着写写代码,感受一下实现的快感。
定义javabean
这个bean里面我们定义了name、age和hobby三个属性。
并定义了四个构造方法,在下面讲解的时候会一一说到。
配置bean文件
比如我们要创建一个实体类,通常的做法是new一个,这里springICO容器给我们提供了另一种方法。
这里id是唯一标识,class是指我们的加载类。在项目启动的时候就会默认加载这个bean,并将存放于springICO容器中,实现原理课参考:《Spring4.1.4 ioc原理》。
需要注意的是,如果调用该bean,在UserInfo中必须包含一个无参构造方法。
这样在调用的时候,便可以用ApplicationContext 通过bean的id来获取对应的对象了。
代码如下:
我们在bean中给name和age分别赋值,这就相当于调用了setter方法,
打印结果:
以上的例子只是调用无参构造方法,那么如何调用自己定义的构造方法呢?
如上所示,我们自己定义了三个构造方法,第一个只有name属性,第二个和第三个参数及类型相同,只是age和hobby的顺序变换了一下。
这里的constructor可以理解为就是构造参数,value是对应的参数的值,index是指的第几个参数,从0开始。
这样我们再运行一下,看看效果
从结果中可以看到我们对构造方法中参数的赋值生效了。
然而很有意思的事情也发生了,我们用的依然是HelloWorld中的代码,只是获取了一个UserInfo的实例,并没有调用其它构造方法,可是如上图所示,无参的构造方法和自定义的三个有参构造方法均在 UserInfo user = (UserInfo)act.getBean("userid"); 前执行了。 内容来自www.itxxz.com
定义javabean
这个bean里面我们定义了name、age和hobby三个属性。
并定义了四个构造方法,在下面讲解的时候会一一说到。
- package com.itxxz.user.bean;
- /**
- * 用户类
- *
- * @author IT学习者-螃蟹
- * @url www.itxxz.com
- *
- */
- public class UserInfo {
- public UserInfo(){
- System.out.println("Construction ...");
- System.out.println(toString());
- }
- public UserInfo(String name){
- this.name = name;
- System.out.println("Construction one...");
- System.out.println(toString());
- }
- public UserInfo(String name,String hobby,int age) {
- this.name = name;
- this.age = age;
- this.hobby = hobby;
- System.out.println("Construction two...");
- System.out.println(toString());
- }
- public UserInfo(String name, int age, String hobby) {
- this.name = name;
- this.age = age;
- this.hobby = hobby;
- System.out.println("Construction three...");
- System.out.println(toString());
- }
- public void say(){
- System.out.println("hello,我是"+name);
- }
- private String name;
- private int age;
- private String hobby;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getHobby() {
- return hobby;
- }
- public void setHobby(String hobby) {
- this.hobby = hobby;
- }
- @Override
- public String toString() {
- return "UserInfo [name=" + name + ", age=" + age + ", hobby=" + hobby
- + "]";
- }
- }
配置bean文件
比如我们要创建一个实体类,通常的做法是new一个,这里springICO容器给我们提供了另一种方法。
- <!-- 定义一个bean类 -->
- <bean id="userid" class="com.itxxz.user.bean.UserInfo">
- <property name="name" value="IT学习者"></property>
- <property name="age" value="20"></property>
- </bean>
这里id是唯一标识,class是指我们的加载类。在项目启动的时候就会默认加载这个bean,并将存放于springICO容器中,实现原理课参考:《Spring4.1.4 ioc原理》。
需要注意的是,如果调用该bean,在UserInfo中必须包含一个无参构造方法。
这样在调用的时候,便可以用ApplicationContext 通过bean的id来获取对应的对象了。
代码如下:
- package com.itxxz.test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import com.itxxz.user.bean.UserInfo;
- /**
- *
- * @author IT学习者-螃蟹
- *
- * @url www.itxxz.com
- *
- */
- public class HelloWorld {
- public static void main(String[] args) {
- ApplicationContext act = new ClassPathXmlApplicationContext(
- "applicationContext.xml");
- System.err.println("----获取userbean----");
- UserInfo user = (UserInfo)act.getBean("userid");
- System.out.println(user.getName());
- user.say();
- }
- }
我们在bean中给name和age分别赋值,这就相当于调用了setter方法,
打印结果:
以上的例子只是调用无参构造方法,那么如何调用自己定义的构造方法呢?
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
- <!-- 定义一个bean类 -->
- <bean id="userid" class="com.itxxz.user.bean.UserInfo">
- <property name="name" value="IT学习者"></property>
- <property name="age" value="20"></property>
- </bean>
- <!-- 构造方法一 -->
- <bean id="userOne" class="com.itxxz.user.bean.UserInfo">
- <constructor-arg value="IT学习者" index="0"></constructor-arg>
- </bean>
- <!-- 构造方法二 -->
- <bean id="usertwo" class="com.itxxz.user.bean.UserInfo">
- <constructor-arg value="螃蟹" index="0"></constructor-arg>
- <constructor-arg value="篮球" index="1"></constructor-arg>
- <constructor-arg value="18" index="2"></constructor-arg>
- </bean>
- <!-- 构造方法三 -->
- <bean id="userThree" class="com.itxxz.user.bean.UserInfo">
- <constructor-arg value="青鸟" index="0"></constructor-arg>
- <constructor-arg value="22" index="1"></constructor-arg>
- <constructor-arg value="足球" index="2"></constructor-arg>
- </bean>
- </beans>
如上所示,我们自己定义了三个构造方法,第一个只有name属性,第二个和第三个参数及类型相同,只是age和hobby的顺序变换了一下。
这里的constructor可以理解为就是构造参数,value是对应的参数的值,index是指的第几个参数,从0开始。
这样我们再运行一下,看看效果
从结果中可以看到我们对构造方法中参数的赋值生效了。
然而很有意思的事情也发生了,我们用的依然是HelloWorld中的代码,只是获取了一个UserInfo的实例,并没有调用其它构造方法,可是如上图所示,无参的构造方法和自定义的三个有参构造方法均在 UserInfo user = (UserInfo)act.getBean("userid"); 前执行了。 内容来自www.itxxz.com
其实,springICO容器的设计思想就是,项目在初始化的时候,会将所有的bean存放到内存中(HashMap),bean的id就是key,value就是这个bean,以后的对象 调用就由spring自行管理了。
http://www.itxxz.com/a/gaoji/2015/0120/spring_bean.html
1 0
- Spring4.1.4 bean的加载与赋值
- Bean的初始化与销毁(基于Spring4.x)
- spring4.0源码-bean加载过程
- Spring4----Bean之间的关系
- spring的bean解析与加载
- 3、Spring4之Bean 配置的细节
- Spring4.0注入bean的新方法
- Spring4 Bean管理的注解实现
- Spring4笔记----bean的作用范围
- Spring4笔记----Bean 的生命周期方法
- Spring4入门一:bean的创建
- Spring4深入理解IOC&DI02----Bean配置--自动装配、bean之间的继承与依赖、使用外部属性文件
- 2.3 Spring4 快速入门-bean 的注入与初始化和销毁
- Spring4----使用注解方式配置bean和bean的属性
- spring bean的加载
- bean的延迟加载
- spring的bean加载
- bean的生命周期加载
- 递归遍历整个目录的代码
- 二叉树的构建和三种遍历算法 (递归实现)
- 归并排序的3种实现
- 面向对象
- 学习笔记--Ajax:JSON格式返回数据
- Spring4.1.4 bean的加载与赋值
- 21. Merge Two Sorted Lists
- 读C#线程及线程池笔记
- 对HTTPCONNECTION的理解
- jsp的3个编译指令,7个动作指令,9个内置对象
- "remote:error:refusing to update checked out branch:refs/heads/master"的解决办法
- 淘宝秒杀系统
- iOS使用CocoaPods安装失败解决办法
- JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3