时间的法外狂徒

导航

spring----bean的使用

这篇文章不介绍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();
    }

输出结果:

 

posted on 2019-03-07 17:26  抄手砚  阅读(303)  评论(0编辑  收藏  举报