spring-study-02 在spring容器中注册bean然后注入bean的各种配置方式实例

版权声明:本文为博主原创文章,经博主允许,可自由共享,尽量不要用于商业用途。 https://blog.csdn.net/matrixbbs/article/details/88297741

常见步骤:
1注册一个IOC容器
2用这个容器来实例化业务bean
3使用业务bean来完成业务

实例安排如下:
接口:HelloSpring
主要动用:sayHello()
实现:HelloSpringImpl
驱动:main函数
配置:conf/conf-definition.xml

实现代码如下:
HelloSpring.java

package com.zfh.spring.chapter02.definition;

public interface HelloSpring {

	public void sayHello();
}

HelloSpringImpl.java

package com.zfh.spring.chapter02.definition;

public class HelloSpringImpl implements HelloSpring {
	
	@Override
	public void sayHello() {
		System.out.println("Hello,Springer");
	}

}

Main.java

package com.zfh.spring.chapter02.definition;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	/**
	 * 主驱动测试
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		System.out.print("全限定类名方式:");
//		sayHelloByClass();
//		System.out.print("指定id方式:");
//		sayHelloById();
//		System.out.print("指定name方式:");
//		sayHelloByName();
//		System.out.println("同时指定id和name方式:");
//		sayHelloByIdAndName();

//		System.out.println("同时指定多个name方式:");
//		sayHelloByManyName();
		
//		System.out.println("同时指定id和多个name方式:");
//		sayHelloByIdAndManyName();
		
		System.out.println("同时指定name,再给出别名方式:");
		sayHelloByNameAddAlias();
		
	}
	
	/**
	 * 先指定name,然后再给出多个别名注入
	 */
	private static void sayHelloByNameAddAlias() {
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		HelloSpring helloSpring01 = beanFactory.getBean("HelloSpringName04", HelloSpring.class);
		HelloSpring helloSpring02 = beanFactory.getBean("HelloSpringAlias21", HelloSpring.class);
		HelloSpring helloSpring03 = beanFactory.getBean("HelloSpringAlias22", HelloSpring.class);
		HelloSpring helloSpring04 = beanFactory.getBean("HelloSpringAlias23", HelloSpring.class);
		System.out.print("---用name方式注入---");
		helloSpring01.sayHello();
		System.out.print("---用alias21方式注入---");
		helloSpring02.sayHello();
		System.out.print("---用alias22方式注入---");
		helloSpring03.sayHello();
		System.out.print("---用alias23方式注入---");
		helloSpring04.sayHello();
		
	}

	/**
	 * 配置全限定类名注入
	 */
	public static void sayHelloByClass() {
		//01读xml配置文件,实例化一个IOC容器
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		//02从容器中获取bean,这里,需要从实现类来做实例化bean操作,要转换
		//即自动向上转型
		HelloSpring helloSpring = beanFactory.getBean(HelloSpringImpl.class); 
		//03使用bean做业务,即输出问候
		helloSpring.sayHello();
	}

	/**
	 * 测试用id方式注入
	 */
	public static void sayHelloById() {
		//01实例化一个IOC
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		//02用容器生成bean,这里,不需要从实现类来做了,直接面向接口即可
		//相当于是在配置文件中,已经完成了实现类的配置
		HelloSpring helloSpring = beanFactory.getBean("HelloSpring01",HelloSpring.class);
		helloSpring.sayHello();
	}
	
	/**
	 * 测试用name方式注入
	 */
	public static void sayHelloByName() {
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		HelloSpring helloSpring = beanFactory.getBean("HelloSpringName01", HelloSpring.class);
		helloSpring.sayHello();
	}
	
	/**
	 * 测试用id和name方式注入
	 */
	public static void sayHelloByIdAndName() {
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		HelloSpring helloSpring01 = beanFactory.getBean("HelloSpring02", HelloSpring.class);
		System.out.print("---这是用id方式注入---");
		helloSpring01.sayHello();
		System.out.print("---这是用name方式注入---");
		HelloSpring helloSpring02 = beanFactory.getBean("HelloSpringName02", HelloSpring.class);
		helloSpring02.sayHello();
	}
	
	/**
	 * 测试多个name的方式注入
	 */
	public static void sayHelloByManyName() {
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		HelloSpring helloSpring01 = beanFactory.getBean("HelloSpringName03", HelloSpring.class);
		HelloSpring helloSpring02 = beanFactory.getBean("HelloSpringAlias01", HelloSpring.class);
		HelloSpring helloSpring03 = beanFactory.getBean("HelloSpringAlias02", HelloSpring.class);
		HelloSpring helloSpring04 = beanFactory.getBean("HelloSpringAlias03", HelloSpring.class);
		System.out.print("---用name方式注入---");
		helloSpring01.sayHello();
		System.out.print("---用alias01方式注入---");
		helloSpring02.sayHello();
		System.out.print("---用alias02方式注入---");
		helloSpring03.sayHello();
		System.out.print("---用alias03方式注入---");
		helloSpring04.sayHello();
	}
	
	public static void sayHelloByIdAndManyName() {
		BeanFactory beanFactory = 
				new ClassPathXmlApplicationContext("conf/conf-definition.xml");
		HelloSpring helloSpring01 = beanFactory.getBean("HelloSpring03", HelloSpring.class);
		HelloSpring helloSpring02 = beanFactory.getBean("HelloSpringAlias11", HelloSpring.class);
		HelloSpring helloSpring03 = beanFactory.getBean("HelloSpringAlias12", HelloSpring.class);
		HelloSpring helloSpring04 = beanFactory.getBean("HelloSpringAlias13", HelloSpring.class);
		System.out.print("---用id方式注入---");
		helloSpring01.sayHello();
		System.out.print("---用alias11方式注入---");
		helloSpring02.sayHello();
		System.out.print("---用alias12方式注入---");
		helloSpring03.sayHello();
		System.out.print("---用alias13方式注入---");
		helloSpring04.sayHello();
	}
}

conf-definition.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans
	   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
	<!-- 配置全限定类名,唯一 -->	
	<bean class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 指定id,唯一 -->
	<bean id="HelloSpring01" class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 指定name,唯一 -->
	<bean name="HelloSpringName01" class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 同时指定id和name的方式,id是唯一的,name则是别名 -->
	<bean id="HelloSpring02" name="HelloSpringName02" 
	class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 同时指定多个name方式,第一个name是标识符,其它的则为别名alias -->
	<bean name="HelloSpringName03;HelloSpringAlias01;HelloSpringAlias02;HelloSpringAlias03;" 
	class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 同时指定id和多个name方式,则id是标识符,其它的name为别名 -->
	<bean id="HelloSpring03" name="HelloSpringAlias11;HelloSpringAlias12;HelloSpringAlias13;" 
	class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	
	<!-- 指定name后,再指定别名 -->
	<bean name="HelloSpringName04" 
	class="com.zfh.spring.chapter02.definition.HelloSpringImpl" />
	<alias name="HelloSpringName04" alias="HelloSpringAlias21"/>
	<alias name="HelloSpringName04" alias="HelloSpringAlias22"/>
	<alias name="HelloSpringName04" alias="HelloSpringAlias23"/>
	
	  
</beans>

在spring容器中注册bean的方法有很多种,最常用的就是id方式。
有什么样的注册,即有什么样的配置方式,在注入时,就要做相应的注入方式。

猜你喜欢

转载自blog.csdn.net/matrixbbs/article/details/88297741