这篇文章不介绍spring的相关概念,只记录一下springbean的创建方式和使用方式。

一、bean的创建和调用

1、创建演示需要用到的类:Student、Teacher、Person

package test.spring.school;

public class Student {
private String name;
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
} }
2、spring的xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- beans里的属性是spring的xml标签自动提示的设置 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> <bean id="student" class="test.spring.school.Student"/>
</beans>

文件结构:

3、测试代码

package test.spring;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import test.spring.school.Student; public class TestApp {
@Test
public void testXml() {
@SuppressWarnings("resource")
ApplicationContext ctx = new ClassPathXmlApplicationContext("resources/config.xml");
//根据bean的id查找
Student student = (Student)ctx.getBean("student");
System.out.println(student);
}
}

输出结果:

这种配置bean的方法,是通过类的构造器生成的,所有必须要保证该类有构造器。因为java默认存在无参构造器,可以直接实例化。但是,如果手动添加有参数构造器,必须给属性注入参数值,否则会报错

修改Student类,添加有参构造器:

    public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}

测试输出:

二、bean的其他属性的相关配置

1、作用域的配置

  可以通过<bean>定义的scope属性,该属性值得含义:

  singleton,在每个spring loc容器中,一个bean对应一个对象实例,默认项。

  prototype,一个bean对应多个实例。

  request,在一次HTTP请求中,一个bean对应一个实例,仅限Web环境。

  session,在一个HTTP Session中 ,一个bean定义对应一个实例,仅限于Web环境。

  global Session,在一个全局的HttpSession中,一个bean定义对应一个实例;仅在基于portlet的Web应用中才有意义,portlet规范定义了全局Session的概念。

2、初始和销毁方法

  在<bean>的init-method属性和destroy-method属性定义。

  在<beans>元素中的default-init-method和default-destroy-method中给所有的bean定义全局初始和销毁方法

3、延迟实例化

  在ApplicationContext启动时,默认会将所有singleton bean提前进行实例化,如果不想让一个singleton在启动时实例化,可以使用<bean>元素的lazy-init属性改变。

  同样可以在<beans>元素中使用default-lazy-init属性,实现全局<bean>延迟实例化。

配置:

<bean id="student" class="test.spring.school.Student"
scope="prototype" init-method="init" destroy-method="destroy" lazy-init="true"/>

测试:

@Test
public void testXml() {
@SuppressWarnings("resource")
ApplicationContext ctx = new ClassPathXmlApplicationContext("resources/config.xml");
//根据bean的id查找
Student student = (Student)ctx.getBean("student"); System.out.println(student);
student.destroy();
}

输出结果:

spring----bean的使用的更多相关文章

  1. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  2. Spring Bean详细讲解

    什么是Bean? Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象. Spring 容器会自动完成@bean对象的实例化. 创建应用对象之间的协作关系的行为称为:装配( ...

  3. Spring Bean的生命周期(非常详细)

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  4. spring bean的生命周期

    掌握好spring bean的生命周期,对spring的扩展大有帮助.  spring bean的生命周期(推荐看)  spring bean的生命周期

  5. spring bean的重新加载

    架构体系 在谈spring bean的重新加载前,首先我们来看看spring ioc容器. spring ioc容器主要功能是完成对bean的创建.依赖注入和管理等功能,而这些功能的实现是有下面几个组 ...

  6. Spring Bean

    一.Spring的几大模块:Data access & Integration.Transcation.Instrumentation.Core Spring Container.Testin ...

  7. 【转】Spring bean处理——回调函数

    Spring bean处理——回调函数 Spring中定义了三个可以用来对Spring bean或生成bean的BeanFactory进行处理的接口,InitializingBean.BeanPost ...

  8. 在非spring组件中注入spring bean

    1.在spring中配置如下<context:spring-configured/>     <context:load-time-weaver aspectj-weaving=&q ...

  9. spring bean生命周期管理--转

    Life Cycle Management of a Spring Bean 原文地址:http://javabeat.net/life-cycle-management-of-a-spring-be ...

  10. Spring Bean配置默认为单实例 pring Bean生命周期

    Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...

随机推荐

  1. [Swift]LeetCode310. 最小高度树 | Minimum Height Trees

    For an undirected graph with tree characteristics, we can choose any node as the root. The result gr ...

  2. [Swift]LeetCode665. 非递减数列 | Non-decreasing Array

    Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...

  3. java中this和super关键字的使用

    这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...

  4. Python数据挖掘(爬虫强化)

    (我喜欢雨天,因为雨天我可以回到童年踩水花!哈!) 2018年 --7月--12日 : 多云又暴雨 T—T 前言 我要把爬虫的终极利器介绍一下,这个只要是我们肉眼能看到的,就算在源码中或者在json中 ...

  5. 熟悉使用Github,VS进行项目的开发(第二次作业)

    git地址 https://github.com/Jason98w git用户名 Jason98w 学号后5位 72323 博客地址 https://www.cnblogs.com/jason5689 ...

  6. BBS论坛(十三)

    13.1点击更换图形验证码 (1)front/signup.html <div class="form-group"> <div class="inpu ...

  7. javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)

    主要内容: 1.数组整体元素修改 2. 数组筛选 3.jquery 元素转数组 4.获取两个数组中相同部分或者不同部分 5.数组去重并倒序排序 6.数组排序 7.数组截取slice 8.数组插入.删除 ...

  8. qt 布局

    说到qt布局,比起之前用的MFC好了许多,而且qt支持qss,可以更好的美化界面.qt提供了几种常见的布局管理 窗体布局,这对客户端程序来说是一个福音,再也不用操心程序界面放大缩小时界面控件怎么变化, ...

  9. 『Kruscal重构树 Exkruscal』

    新增一道例题及讲解 Exkruscal \(Exkruscal\)又称\(Kruscal\)重构树,是一种利用经典算法\(Kruscal\)来实现的构造算法,可以将一张无向图重构为一棵具有\(2n-1 ...

  10. Steeltoe之Distributed Tracing篇

    Steeltoe里的分布式追踪功能与Spring Cloud Sleuth一样,支持在日志中记录追踪数据,或者上传到远端的服务,比如Zipkin. Logging 在Steeltoe中使用日志时需要引 ...