spring框架学习笔记(二)

配置Bean

Ioc容器

Ioc容器需要实例化以后才可以从Ioc容器里获取bean实例并使用。

spring提供两种方式类型的Ioc容器实现:

BeanFactory:底层的,面向spring框架的。

ApplicationContext :面向开发人员的,一般用这个。

有两个实现类:

  1. ClassPathXmlApplicationContext:从类路径下加载配置文件。
  2. FileSystemXmlApplicationContext:从文件系统中加载配置文件。

两种方式配置文件是相同的。

通过xml方式配置bean

示例:

	<!--xml的方式配置bean -->
	<bean id="productBean" class="com.pfSoft.beans.ProductEntity">
		<property name="prodNo" value="牙膏"></property>
		<property name="prodName" value="筷子"></property>
	</bean>

class: 由示例中,可以看到class使用了全类名,因此spring是通过反射的方式在Ioc容器中创建bean的,因此bean中必须有无参的构造函数

ProductEntity productEntity= (ProductEntity) applicationContext.getBean("productBean");

id:在获取bean的时候getBean中的参数,是id的名字。即配置bean时候取的名称。(标示容器中的 bean id,唯一)

获取Bean的方式:

getBean方法有几个重载,通过查看BeanFactory接口定义可以发现,有如下重载:



			ProductEntity productEntity1= (ProductEntity) applicationContext.getBean("productBean");	//使用beanId获取
			System.out.println(productEntity1.getProdNo());
			System.out.println(productEntity1.getProdName());

			ProductEntity productEntity2= applicationContext.getBean(ProductEntity.class);		//使用类型获,但是该类型必须在Ioc中容器唯一,否则会报错
			System.out.println(productEntity2.getProdNo());
			System.out.println(productEntity2.getProdName());

使用构造函数的方式注入

之前的例子是使用属性注入的方式实现注入的,现在写一个构造函数注入的方式。

新建bean实体类Order:

public class Order {

	public Order(String orderNo,BigDecimal price,String customer){
		this.orderNo=orderNo;
		this.price=price;
		this.customerName=customer;
	}

	private String orderNo;
	private BigDecimal price;
	private String customerName;
	/**
	 *
	 * @return the orderNo
	 */
	public String getOrderNo() {
		return orderNo;
	}
	/**
	 * @param orderNo the orderNo to set
	 */
	public void setOrderNo(String orderNo) {
		this.orderNo = orderNo;
	}
	/**
	 *
	 * @return the price
	 */
	public BigDecimal getPrice() {
		return price;
	}
	/**
	 * @param price the price to set
	 */
	public void setPrice(BigDecimal price) {
		this.price = price;
	}
	/**
	 *
	 * @return the customerName
	 */
	public String getCustomerName() {
		return customerName;
	}
	/**
	 * @param customerName the customerName to set
	 */
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Order [orderNo=" + orderNo + ", price=" + price
				+ ", customerName=" + customerName + "]";
	}

}

下面是配置文件示例,参数含义见代码中注释,其中index和type为可选参数,只有当存在多个构造函数重载为了确定具体用哪个构造函数实例化时才需要结合使用:

<!--用构造函数的方式注入
	value:代表给参数赋的值。
	index:构造函数中第几个方法,从0开始。
	type:方法的类型。
	当有多个构造函数重载时,需要通过index和type结合使用来确定用哪个构造函数实例化
	 -->
	<bean id="OrderBean" class="com.pfSoft.beans.Order">
		<constructor-arg value="1001" index="0" ></constructor-arg>
		<constructor-arg value="33.333" index="1"  ></constructor-arg>
		<constructor-arg value="pf" index="2" ></constructor-arg>
	</bean>

测试代码:

	@Test
	public void testConstructDep() {
		Order order=(Order) applicationContext.getBean("OrderBean");
		System.out.println(order);
	}

输出:Order [orderNo=1001, price=33.333, customerName=pf]

使用注解的方式配置bean

时间: 2024-10-11 23:04:07

spring框架学习笔记(二)的相关文章

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

spring框架学习(二)依赖注入

转自:http://blog.csdn.net/lishuangzhe7047/article/details/20740835 ———————————————————————————————————————————— spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入.接口注入不作要求,下面介绍前两种方式. 1,set注入 采用属性的set方法进行初始化,就成为set注入. 1)给普通字符类型赋值. [java] view plaincopyprint? pub

Spring视频学习笔记(二)

Spring视频学习笔记(二) XML配置里的Bean自动装配(三个来测试实现) /** * Person类 * */ public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Ad

spring框架学习笔记7:事务管理及案例

Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate的事务管理:http://www.cnblogs.com/xuyiqing/p/8449167.html 可以做个对比 Spring管理事务特有的属性: 事务传播行为:事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行. 例

Spring框架学习(二)IOC注入之set/get方法

action层需要调用service层对象,service层又需要调用dao层的对象.一般情况而言就直接newXXX()使用就可以了,但 是这种方法会使程序的耦合性太强.当Action类中需要更换service方法时,就需要改动源代码.Spring框架就用IOC注入的方法帮我们解决 了这个问题. 示例代码(模拟WEB环境下): applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> &

spring框架学习笔记(一)

仅为个人笔记,方便自己日后查看. eclipse安装spring插件的方法: http://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.html 使用maven添加spring需要的jar包. 几个必须的jar包:core.bean.context.express.另外依赖一个日志包commons—logging pom.xml文件中为了统一版本,因此在properties写了版本号如下: <properties> <!-- sp

spring框架学习笔记(三)

接上一节,配置bean的关联关系: 新增bean实体类Manufacture 代码如下: 其中要在Manufacture中包含对ProductEntity的引用. public class Manufacture { private String manName; private ProductEntity product; /** * * @return the manName */ public String getManName() { return manName; } /** * @p

spring框架学习笔记4:SpringAOP实现原理

AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入封装.继承.多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合.不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性.异常处理和透明的持续性也都是如此,这种散布在各

spring框架学习笔记(十)

通过注解的方式配置bean Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 即,想要实现注解的方式配置bean需要满足2个条件: 类上面标注特定组件,如:@Component.@Service.@Repository.@Controller 在配置文件中增加bean-scan:<context:component-scan base-package="com.pfSoft.annotation"></context:component