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!老张,快来杭州
原创粉丝点击