文档章节

Spring Bean基础

SuperHeroes
 SuperHeroes
发布于 06/24 18:38
字数 1060
阅读 18
收藏 0
点赞 0
评论 0

1、Bean之间引用

<!--如果Bean配置在同一个XML文件中,使用local引用-->
<ref bean="someBean"/>

<!--如果Bean配置在不同的XML文件中,使用ref引用-->
<ref local="someBean"/>

其实两种情况都可以使用“ref”引用Bean。但使用local可以提高代码可读性。

2、注入值到Bean属性

Spring有三种方式注入值到 bean 属性:

  • 正常方式
  • 快捷方式
  • “P”模式

例如有一个类:

public class CCC{
    private String name;
    private String type;

    //getter和setter方法
    //...
}

三种注入值的方法如下:

//正常方式
<bean id="ccc" class="CCC">
    <property name="name">
        <value>电脑</value>
    </property>
    <property name="type">
        <value>联想</value>
    </property>
</bean>

//快捷方式
<bean id="ccc" class="CCC">
    <property name="name" value="电脑" />
    <property name="type" value="联想" />
</bean>

//“p“模式
<bean id="ccc" class="CCC" 
      p:name="电脑" p:type="联想" />

3、加载多个配置文件

将所有Bean配置在一个XML文件中不现实,通常会按照Bean的功能、类别配置在不同的XML文件中。

比如现在有三个配置文件a.xml, b.xml和c.xml。可以用下面这种原始方法加载多个配置文件:

ApplicationContext context = 
    	new ClassPathXmlApplicationContext(new String[] {"a.xml","b.xml","c.xml"});

但更好的方法是创建一个super.xml,该xml组织所有想加载的xml, 然后加载该xml即可。

<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-2.5.xsd">

	<import resource="a.xml"/>
    <import resource="b.xml"/>
    <import resource="c.xml"/>
	
</beans>
ApplicationContext context = 
    	new ClassPathXmlApplicationContext("super.xml");

4、配置内部Bean

例如有一个Customer类,持有一个私有Person类的引用。第一种实现是配置Bean引用----单独配置两个Bean,然后让customer bean引用person bean。这里实现第二种方法:将person bean配置在customer bean内部。

<bean id="Customer" class="Customer">
    <property name="person">
        <bean class="Person">
            <property name="name" value="张三" />
            <property name="address" value="南京" />
            <property name="age" value="21" />
        </bean>
    </property>
</bean>

5、Bean的作用域

Spring Bean支持5种范围域:

  1. 单例 - 相同请求返回同一个bean实例
  2. 原型- 当每次请求时返回一个新的bean实例
  3. 请求 - 返回每个HTTP请求的一个Bean实例
  4. 会话 - 返回每个HTTP会话的一个bean实例
  5. 全局会话- 返回全局HTTP会话的一个bean实例

大多数情况下使用单例和原型。Spring默认范围域是单例。

单例和原型的区别用一个例子来说明:

还用上面的CCC类来讲,如果配置橙单例模式(就是默认情况),那么调用情况以及相应输出如下:

public static void main( String[] args ){
    ApplicationContext context = 
    	 new ClassPathXmlApplicationContext("main.xml");

    CCC ccc1 = (CCC)context.getBean("ccc");
    ccc1.setName("电脑1");
    System.out.println("name : " + ccc1.getName());
    	
    //再次取这个Bean
    CCC ccc2 = (CCC)context.getBean("ccc");
    System.out.println("name : " + ccc2.getName());
}

//输出:
//电脑1
//电脑1

如果配置成原型模式:

//通过XML配置文件
<bean id="ccc" class="CCC" scope="prototype"/>

//通过注解
@Service
@Scope("prototype")
public class CCC{
    //...
}

调用和相应输出如下:

public static void main( String[] args ){
    ApplicationContext context = 
    	 new ClassPathXmlApplicationContext("main.xml");

    CCC ccc1 = (CCC)context.getBean("ccc");
    ccc1.setName("电脑1");
    System.out.println("name : " + ccc1.getName());
    	
    //再次取这个Bean
    CCC ccc2 = (CCC)context.getBean("ccc");
    System.out.println("name : " + ccc2.getName());
}

//输出:
//电脑1
//null

6、PropertyPlaceholderConfigurer读取配置文件

项目开发过程中通常将一些配置信息写在一个单独文件中,如properties文件。Spring可以使用 PropertyPlaceholderConfigurer 类来获取外部文件的配置信息。

例如在项目类路径下有一个属性文件(database.properties),包含数据库的详细信息。

jdbc.driverClassName=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql://localhost:3306/hello
	jdbc.username=root
	jdbc.password=123456

可以在配置文件中配置一个PropertyPlaceholderConfigurer映射到“database.properties”属性文件。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>database.properties</value>
    </property>
</bean>

<bean id="hello" class="Hello">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

7、配置Bean继承

<bean id="baseCustomer" class="BaseCustomer">
	<property name="country" value="Malaysia" />
</bean>

<bean id="customerBean" parent="baseCustomer">
	<property name="action" value="buy" />
	<property name="type" value="1" />
</bean>

8、其他知识点

  • 配置集合(List,Set,Map)
  • 创建集合(Set、List、Map)通过ListFactoryBean、SetFactoryBean、MapFactoryBean
  • 依赖检查等

 

© 著作权归作者所有

共有 人打赏支持
SuperHeroes
粉丝 17
博文 208
码字总数 172462
作品 0
南京
其他
Spring import配置文件的顺序问题

使用Spring import多配置文件是很方便的。 Spring多配置文件加载顺序是,先加载在前面配置的文件,再加载后面的,但是如果有bean的名字一样的话,后加载的bean会替换掉前面的bean。 如果写一...

亮_dangdang
2014/05/25
0
0
spring framework -- 总体架构

Spring 框架的官方图片 这张图信息很有限, 只是描述了下spring 框架的modules, 核心部分 Beans core context Expression Language 官方描述 Core 和 Beans 两个模块 提供了框架的基本支持,...

triankg
2014/03/19
0
0
Spring基于注解的配置概述

以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration.html: 从Spring 2.5开始就可以使用注解来配置依赖注入。而不是采用XML来描述一个bean的连线,你...

easonjim
2017/05/23
0
0
[转载]69道Spring面试题和答案

原文地址 http://ifeve.com/spring-interview-questions-and-answers/ 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概......

王木东
2017/03/27
0
0
SpringFramework核心技术一(IOC:Bean的范围)

Bean的范围 当你创建一个bean定义时,你创建一个配方来创建由该bean定义定义的类的实际实例。bean定义是一个配方的想法很重要,因为它意味着,就像一个类一样,您可以从一个配方创建许多对象...

王木东
05/20
0
0
Spring的基础标签库提供了简单易用的数据绑定和显示功能

Spring的基础标签库提供了简单易用的数据绑定和显示功能。 配置基础标签库: 需要将Spring安装包中的spring.tld复制到项目的WEB-INF目录下,并在web.xml中配置该标签库: <taglib> 然后在JSP...

BigMaN
2011/08/17
0
0
Spring学习笔记1——基础知识

1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EE deve...

李长春
2011/10/09
0
0
在 Spring 中使用 parent bean 定义

在 JavaRanch Big Moose Saloon 的这篇文章促使我启动 eclipse 并且写下了壹些测试代码。 问题非常基础,你如何去映射壹个 parent bean 作为 Spring 的 Bean 定义的壹部分。 我们壹起来看看以...

苗哥
2012/07/26
0
1
Spring中ApplicationContext和beanfactory区别

org.springframework.beans及org.springframework.context包是Spring IoC容器的基础。BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。ApplicationContext是BeanFactory的扩...

ArlenXu
2015/01/18
0
0
RabbitMQ基础教程之Spring&JavaConfig使用篇

RabbitMQ基础教程之Spring使用篇 相关博文,推荐查看: RabbitMq基础教程之安装与测试 RabbitMq基础教程之基本概念 RabbitMQ基础教程之基本使用篇 RabbitMQ基础教程之使用进阶篇 在实际的应用...

小灰灰Blog
06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
20分钟前
0
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
25分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
41分钟前
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
59分钟前
0
0
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部