Spring3-三种方式配置Bean
来源:互联网 发布:java字符串金额格式化 编辑:程序博客网 时间:2024/05/17 10:29
通过一些资料的参考与学习,整理出来的东西。
首先,创建两个实体类,Hello类和Address类
public class Hello { private String name; private Address address; public Hello() {} public Hello(String name) { this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public void show(){ System.out.println("hello,"+name+",快来"+address.getAddress()); }}
public class Address { private String address; public Address(){} public Address(String address){ this.address=address; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");Hello hello= (Hello)ac.getBean("hello");hello.show();
第一种方式:通过编写xml方式直接配置bean;
<bean id="hello" class="com.bean.Hello"> <property name="name" value="老王"/> <property name="address" ref="addr"/></bean><bean id="addr" class="com.bean.Address"> <property name="address" value="西安"/></bean>运行结果:hello!老王,快来西安
第二种方式:通过工厂模式配置bean(静态工厂和实例工厂)
1、通过静态工厂方式配置bean(静态工厂,就是将我们的对象直接放在一个静态区里面,想用的时候我们可以直接调用就行)
public class HelloStaicFactory { private static Map<Integer, Hello> map=new HashMap<Integer, Hello>(); static{ map.put(1,new Hello("老王",new Address("北京"))); //如果这里有多个对象要传入的话,就可以根据键来检索了 }//将我们的对象都存放到工厂里面去,而且都是静态的,可以随时调用 public static Hello getHello(int id){ return map.get(id); }//对外提供获取接口,根据id获得对象}
通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例
<bean id="hello" class="com.test.HelloStaicFactory" factory-method="getHello"> <constructor-arg value="1"></constructor-arg> </bean>运行结果:hello!老王,快来北京
2、通过实例工厂方式配置bean,实例工厂与静态工厂的区别在于一个是静态的,可直接调用的,一个是需要先实例化工厂,在获取工厂里面的对象的
public class HelloInstanceFactory { private Map<Integer, Hello> map; public HelloInstanceFactory(){ map=new HashMap<Integer, Hello>(); map.put(2, new Hello("老李",new Address("宝鸡"))); } public Hello getHello(int id){ return map.get(id); }}
<bean id="addressFactory" class="com.bean.HelloInstanceFactory"></bean> <bean id="hello" factory-bean="addressFactory" factory-method="getHello"> <constructor-arg value="2"></constructor-arg></bean>运行结果:hello!老李,快来宝鸡
第三种方式:通过注解方式(运用非常广泛)
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Component;@Component("hello")//@component(把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="hello" class="com.bean.Hello"/>)@Scope("prototype")//原型对象,默认为单例对象,选择会执行几次构造函数。这里选择是,每次获取新对象都会执行一次构造函数,对象地址都不同。public class Hello { private String name="老张"; @Autowired//自动注入对象,这个注解就是spring可以自动帮你把bean里面引用的对象的bean,相当于ref的作用 private Address address; public Hello() { } public Hello(String name,Address address) { this.name=name; this.address=address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public void show(){ System.out.println("hello!"+name+",快来"+address.getAddress()); }}
import org.springframework.stereotype.Component;@Component("address")//将address对象也加载到spring容器类public class Address { String address="杭州"; public Address(){ } public Address(String address){ this.address=address; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
<?xml version="1.0" encoding="UTF-8"?><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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <context:component-scan base-package="com.bean"/></beans>运行结果:hello!老张,快来杭州
阅读全文
1 0
- Spring3-三种方式配置Bean
- Spring3.0学习之bean的配置方式
- spring框架入门--三种方式配置Bean
- Spring使用工厂模式配置bean的三种方式
- Spring Bean配置方式之三:注解配置
- Spring Bean配置方式之三:注解配置
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
- Spring3.2 中 Bean 定义之基于 Annotation 和 Java Code 配置方式的源码解析
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
- Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析
- Spring中bean工厂创建bean的三种方式
- 自动填充Bean的三种方式
- 三种实例化bean的方式
- Spring中bean三种注解方式。
- 实例化bean共有三种方式
- 实例化bean的三种方式
- spring实例bean的三种方式
- spring 创建bean的三种方式.
- 贝叶斯网络建模简要分析
- 分治算法实践——书页!
- JZ2440 第9章 中断体系结构
- 自考有感
- Samba服务及多用户samba挂载
- Spring3-三种方式配置Bean
- 设计模式--责任链
- 信息系统开发与管理个人分享
- unity插件制作(转载)
- 洛谷 2731 骑马修栅栏 Riding the Fences 欧拉路径
- You have not accepted the license agreements of the following SDK components的解决方案
- 《c++最后一站》
- netty写入
- bzoj 1978: [BeiJing2010]取数游戏 game 数学