zoukankan      html  css  js  c++  java
  • 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();
        }

    输出结果:

    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    让我们一起Go(八)
    让我们一起Go(七)
    让我们一起Go(六)
    VTemplate模板引擎的使用入门篇
    超时时间已过或服务器未响应的解决方法
    SQL Server 2005使用BCP命令将数据表导出到Excel第一行包括表头
    VTemplate模板引擎的使用进阶篇
    VTemplate模板引擎的使用认识篇
    免费开源的模板引擎VTemplate
    .NET 4.5 中新提供的压缩类
  • 原文地址:https://www.cnblogs.com/whalesea/p/10491022.html
Copyright © 2011-2022 走看看