Spring框架学习笔记(3)——配置bean
1、属性注入
(1)根据setter方法属性注入,这里使用的是property标签。需要bean属性提供对应的setter方法,比如笔记(1)里的 HelloWorld使用的就是这种方法。
<!-- 根据setter方法属性注入 -->
<bean id="helloworld" class="com.broadtext.beans.Helloworld">
<property name="name" value="Helloworld"></property>
</bean>
(2)根据构造器属性注入,这里使用的是constructor-arg标签。可以不提供setter方法,但是要提供对应的构造器,如果缺少构造器或者构造器里缺少属性就会报错。可以指定参数的位置(index)和类型(type)以区分参数。特殊字符可以使用<![CDATA[<Shanghai>]]>
<!-- 根据构造器属性注入,可以指定参数的位置和类型以区分参数 -->
<bean id="car" class="com.broadtext.beans.Car">
<constructor-arg index="0" value="Audi"></constructor-arg>
<constructor-arg value="Shanghai"></constructor-arg>
<constructor-arg type="double" value="300000"></constructor-arg>
</bean>
<bean id="car2" class="com.broadtext.beans.Car">
<constructor-arg value="BMW"></constructor-arg>
<constructor-arg>
<value><![CDATA[<Shanghai>]]></value>
</constructor-arg>
<constructor-arg type="int" value="240"></constructor-arg>
</bean>
2、通过ref属性建立bean之间的关系,这里在创建person bean的时候会将配置好的car2作为属性注入到person bean里,如果ref指向一个不存在的bean会报undefine错误。
<!-- ref属性建立bean之间的关系 -->
<bean id="person" class="com.broadtext.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<property name="car" ref="car2"></property>
</bean>
3、配置内部bean
<!-- 内部bean不能被外部使用 -->
<bean id="person1" class="com.broadtext.beans.Person">
<property name="name" value="Tom"></property>
<property name="age" value="24"></property>
<property name="car">
<bean class="com.broadtext.beans.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="Shanghai"></constructor-arg>
<constructor-arg type="double" value="300000"></constructor-arg>
</bean>
</property>
</bean>
4、null值的注入
<!-- 测试null值和构造注入 -->
<bean id="person2" class="com.broadtext.beans.Person">
<constructor-arg value="Jreey"></constructor-arg>
<constructor-arg value="24"></constructor-arg>
<constructor-arg><null></null></constructor-arg>
</bean>
5、为级联属性注入
<!-- 级联属性赋值 -->
<bean id="person3" class="com.broadtext.beans.Person">
<constructor-arg value="Jreey"></constructor-arg>
<constructor-arg value="24"></constructor-arg>
<!-- 要先初始化才可以为级联属性赋值,否则会报null错误 -->
<constructor-arg ref="car"></constructor-arg>
<property name="car.maxSpeed" value="250"></property>
</bean>
6、Car.java、Person.java、Main.java
Car.java
package com.broadtext.beans; public class Car {
private String brand;
private String corp;
private double price;
private int maxSpeed; public Car(String brand, String corp, double price) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
} public Car(String brand, String corp, int maxSpeed) {
super();
this.brand = brand;
this.corp = corp;
this.maxSpeed = maxSpeed;
} @Override
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
} public String getBrand() {
return brand;
} public void setBrand(String brand) {
this.brand = brand;
} public String getCorp() {
return corp;
} public void setCorp(String corp) {
this.corp = corp;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public int getMaxSpeed() {
return maxSpeed;
} public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
} }
Person.java
package com.broadtext.beans; public class Person {
private String name;
private int age;
private Car car; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Car getCar() {
return car;
} public void setCar(Car car) {
this.car = car;
} @Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
} public Person() {
} public Person(String name, int age, Car car) {
super();
this.name = name;
this.age = age;
this.car = car;
} }
Main.java
package com.broadtext.beans; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { //ApplicationContext IOC容器
//ClassPathXmlApplicationContext IOC容器的实现类
//走完这一步就会创建出XML里面配的bean
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); //根据配置bean的id获取
Helloworld helloworld = (Helloworld) ctx.getBean("helloworld");
System.out.println(helloworld.getName());
//根据配置bean的类型获取
helloworld = ctx.getBean(Helloworld.class);
System.out.println(helloworld.getName()); //构造器属性注入
Car car = (Car) ctx.getBean("car");
System.out.println(car.toString());
car = (Car) ctx.getBean("car2");
System.out.println(car.toString()); //ref
Person person = (Person) ctx.getBean("person");
System.out.println(person.toString());
//内部bean
person = (Person) ctx.getBean("person1");
System.out.println(person.toString());
person = (Person) ctx.getBean("person2");
System.out.println(person.toString());
person = (Person) ctx.getBean("person3");
System.out.println(person.toString()); } }
Spring框架学习笔记(3)——配置bean的更多相关文章
- 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- Spring框架学习笔记(5)——Spring Boot创建与使用
Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...
- Spring框架学习笔记(1)
Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...
- Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建
之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...
- Spring框架学习笔记(3)——SpringMVC框架
SpringMVC框架是基于Spring框架,可以让我们更为方便的进行Web的开发,实现前后端分离 思路和原理 我们之前仿照SpringMVC定义了一个自定义MVC框架,两者的思路其实都是一样的. 建 ...
- Spring框架学习之注解配置与AOP思想
上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...
- [ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)
一.Spring的Bean管理(注解方式) 1.1 什么是注解 要使用注解方式实现Spring的Bean管理,首先要明白什么是注解.通俗地讲,注解就是代码里的特殊标记,使用注解可以完成相应功能. 注解 ...
- spring框架学习笔记7:事务管理及案例
Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...
随机推荐
- php项目报错 Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg4, O_RDWR) f
今天一个php项目报错: Warning: session_start(): open(D:/software/wamp/wamp/tmp\sess_msrjot7f32ciqb1p2hr4ahejg ...
- Dubbo(一) 开始认识Dubbo,分布式服务框架
引言: 以前的车马很慢,一生只够爱一个人以前的网站人很少,一个单应用服务着一个人--------------------现在,动不动就谈什么高并发,千万级访问.单应用?BOOM!分分钟爆炸.于是,技术 ...
- java-FFmpeg(一) 实现视频的转码和截图功能
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...
- Java订单号生成,唯一订单号(日均千万级别不重复)
Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ...
- Spring之设置Bean值
Java实例的属性值可以有很多种数据类型.基本类型值.字符串类型.java实例甚至其他的Bean实例.java集合.数组等.所以Spring允许通过如下几个元素为Bean实例的属性指定值: value ...
- 每天学一点Docker(1)
Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...
- TCP 建立连接:三次握手
转自:http://www.cnblogs.com/winner-0715/p/5032661.html 感谢! TCP 建立连接过程 TCP是因特网中的传输层协议,使用三次握手协议建立连接,下面是T ...
- WebDriver的等待方式
/* * 1.线程休眠 * 2.隐式等待 * 3.显示等待 * */ package com.sfwork; import java.util.concurrent.TimeUnit; import ...
- golang 多维数组
具体的题目如下:(就是将多维数组的行列互换) A multi-dimensional array is an array of arrays. 2-dimensional arrays are the ...
- 深入研究ES6 Generators
ES6 Generators系列: ES6 Generators基本概念 深入研究ES6 Generators ES6 Generators的异步应用 ES6 Generators并发 如果你还不知道 ...