版权声明:本文为博主原创文章,经博主允许,可自由共享,尽量不要用于商业用途。 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方式。
有什么样的注册,即有什么样的配置方式,在注入时,就要做相应的注入方式。