spring配置Bean
Bean 就是一个类
一下代码都是基于spring之IOC和DI实现案例基础上进行解析
Bean的实例化方式:
1.无参构造
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="张三"></property>
</bean>
2.静态工厂方法
applicationContext.xml
<bean id="UserService" class="com.baidu.test.BeanFactory2" factory-method="CreateUserServiceImp">
<property name="name" value="张三"></property>
</bean>
创建BeanFactory2类
public class BeanFactory2 {
public static UserService CreateUserServiceImp(){
return new UserServiceImp();
}
}
3.实例工厂方法
<bean name="BeanFactory2" class="com.baidu.test.BeanFactory2"></bean>
<bean id="UserService" factory-bean="BeanFactory2" factory-method="CreateUserServiceImp">
<property name="name" value="张三"></property>
</bean>
创建BeanFactory2类
public class BeanFactory2 {
public UserService CreateUserServiceImp(){
return new UserServiceImp();
}
}
Bean的作用域
在bean的属性中有个scope,用来描述bean的作用域.
| singleton | 单例 spring IOC容器中只有一个Bean实类(默认的scope) |
| prototype | 多例 从spring容器中获取时都会返回一个新的实例 |
| request | 将bean对象request.setAttribute()存储到request域中 |
| session | 将bean对象session.setAttribute()存储到session域中 |
开发中常用singleton和prototype(单例和多例)
Bean的属性注入
1.构造方法注入
提供构造方法
public UserServiceImp(String name) {
super();
this.name = name;
}
修改applicationContext.xml文件
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<constructor-arg index="0" value="张三" type="java.lang.String"></constructor-arg>
</bean>
2.Setter注入
修改applicationContext.xml
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="uu"></property>
<property name="u" ref="user"></property>//引入另一个bean
</bean>
3.map注入
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="uu">
</property>
<property name="list">
<list>
<value>10</value>
<value>张三</value>
<ref bean="user"/>
</list>
</property>
<property name="set">
<set>
<value>张三</value>
<ref bean="user"/>
</set>
</property>
<property name="map">
<map>
<entry key="1" value-ref="user"></entry>
<entry key="2" value="12"></entry>
</map>
</property>
</bean>
空间名称p和c
引入schma
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
首先它们不是真正的名称空间,是虚拟的。它是嵌入到 spring 内核中的。
使用 p 名称空间可以解决我们 setter 注入时<property>简化
使用 c 名称空间可以解决我们构造器注入时<constructor-arg>简化
applicationContext.xml
p名称空间 --------- setter注入
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp" p:name="uu" p:u-ref="user" >
</bean>
c名称空间------- 构造器注入
<bean id="UserService" class="com.baidu.test.UserServiceImp" c:name="uu" c:u-ref="user" > </bean>
SPEL(spring expression language) spring 3.0版本以后
它类似于 ognl 或 el 表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储
及方法调用等。
Spel 表达式的格式 #{表达式}
applicationContext.xml
1.完成bean之间的注入
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="uu"></property>
<!-- <property name="u" ref="user"></property>->
<property name="u" value="#{user}"></property>替代上面的ref值(完成bean之间的注入)
</bean>
2.支持属性调用和即方法调用
<bean id="user" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="15"></property>
</bean>
<bean id="user1" class="com.baidu.test.User">
<property name="name" value="uuu"></property>
<property name="age" value="#{user.getAge()+5}"></property>
</bean>
<bean id="UserService" class="com.baidu.test.UserServiceImp">
<property name="name" value="uu"></property>
<property name="u" value="#{user1}"></property>
</bean>
spring配置Bean的更多相关文章
- spring 配置bean
Main(测试方法) public class Main { public static void main(String[] args) { //1.创建Spring 的IOC容器对象: //spr ...
- Spring配置bean的详细知识
在Spring中配置bean的一些细节.具体信息请参考下面的代码及注释 applicationContext.xml文件 <?xml version="1.0" encodi ...
- Spring -- 配置bean的三种方法
配置通过静态工厂方法创建的bean public class StaticBookFactory { //静态工厂方法: public static Book getBook(String bookN ...
- Spring配置Bean,为属性赋值
SayHello的实体类: package com.langchao; /** * @ClassName: SayHello * @description: * @author: ZhangYawei ...
- Spring(十):Spring配置Bean(三)Bean的作用域、使用外部属性文件
Bean的作用域: 支持四种配置,分别是singleton,prototype,request,session. singleton 默认情况下在spring confinguration xml文件 ...
- Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系
XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...
- Spring(八):Spring配置Bean(一)BeanFactory&ApplicationContext概述、依赖注入的方式、注入属性值细节
在Spring的IOC容器里配置Bean 配置Bean形式:基于xml文件方式.基于注解的方式 在xml文件中通过bean节点配置bean: <?xml version="1.0&qu ...
- spring 配置bean的方法及依赖注入发方式
Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).FactoryBean 这里依据全类名配置bean <bean id="helloWo ...
- Spring入门第二课:Spring配置Bean的细节
1.配置bean的作用域: 通过配置scope属性可以bean的作用域,参数有 prototype.request.session.singleton. 1)singleton为单例,IoC容器只会创 ...
- spring 配置bean-自己主动装配
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qilixiang012/article/details/28260477 概要:(蓝色为本节所讲) ...
随机推荐
- linux 常见基础知识(此文章将会在整个linux学习过程中,不断添加)
1,linux 文件类型 普通文件 目录文件 链接文件 块设备 字符设备 Socket 管道文件 - d l b c s p 2,linux 文件属性 蓝色 绿色 浅蓝色 红色 灰色 目录 可执行文件 ...
- 一行代码轻松搞定各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实IE给出了解决方案Google也给出了解决方案百度也应用了这种方案去解决IE的兼容问题? 百度源代码如下: <!Doctype html& ...
- thinkphp装修平台源码
每日签到微擎微赞自助授权中心站长工具(new)☜=每日新帖=微信开发手册VIP优惠活动 开启辅助访问切换到宽版 用户名 自动登录 找回密码 密码 登录 立即注册 只需一步,快速开始 首页 微鱼商业 ...
- 深入理解HTTP协议及原理分析
1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ...
- Oracle_高级功能(4) 数据库存储结构
数据库存储结构分为:物理存储结构和逻辑存储结构.物理结构和逻辑结构分开,对物理数据的存储不会影响对逻辑结构的访问.1.物理存储结构 数据库文件 os block2.逻辑存储结构 tablespace ...
- Liunx cal
1.命令格式: cal [参数][月份][年份] 2.命令功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份 3.命令参数: -1 显示一个月的 ...
- IDEA 中javadoc插件不能设置的问题
解决方案 1.手动下载插件 https://github.com/ranzou06/intellij-javadocs/blob/master/intellij-javadocs.zip?raw=tr ...
- 789A Anastasia and pebbles
A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...
- iOS.Objective-C.Dependency.Graphing-v0.1
当Project越来越复杂,模块间的依赖就会很复杂,不合理的依赖就出现:不必要的依赖,双向依赖等等. 在iOS Application Project中可以将依赖定义为:对某个头文件的import. ...
- De novo RNA-Seq Assembly Using De Bruijn Graphs
De novo RNA-Seq Assembly Using De Bruijn Graphs 2017-06-12 09:42:47 59 0 0 在说基因组的拼接之前,可 ...