---恢复内容开始---

项目结构如下:

lib如下:

1.首先建立SayHell.java接口

 package com.it.sxd;

 public interface SayHell {
public void sayHello();
}

2.下面有它的两个实现类

SayHelloImpl.java

 package com.it.sxd;

 public class SayHelloImpl implements SayHell {

     @Override
public void sayHello() {
System.out.println("hello");
} }

SayHelloImpl2.java

 package com.it.sxd;

 public class SayHelloImpl2 implements SayHell {
private String message; public SayHelloImpl2() {
this.message = "无参的构造器";
} public SayHelloImpl2(String message) {
super();
this.message = message;
} @Override
public void sayHello() {
System.out.println(message);
} }

还有一个静态工厂SayHelloFactory.java

 package com.it.sxd;

 public class SayHelloFactory {

     public static SayHell  sayhell(String message){
return new SayHelloImpl2(message);
} public static void sayAmount(){
double b= 9/3;
System.out.println(b);
} }

3.配置文件hello.xml【bean都是在这里配置好的】

 <?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!--测试1 :bean就是Ioc容器初始化。装配,管理的对象,除此之外,bean与应用程序中的对象没有任何区别, id 表示你这个组件的名字,class表示组件类,也就是位置 -->
<bean id="hello1" class="com.it.sxd.SayHelloImpl">
</bean> <!--测试2 无参的构造方法 使用标签alisa起别名 -->
<bean id="hello3" class="com.it.sxd.SayHelloImpl2">
</bean>
<alias name="hello3" alias="alisa3"/> <!-- 测试2 有参数的构造方法 使用name,给多个值起别名-->
<bean id="hello2" name="alisa1,alisa2" class="com.it.sxd.SayHelloImpl2">
<constructor-arg index="0" value="hello有参构造方法"></constructor-arg><!-- 默认的为构造方法传值,index代表第几个参数,0代表第一个,value就是给构造器传递的值 -->
</bean> <!-- 测试3 静态工厂创建bean factory-method就代表初始化这个class类的时候,就执行了这个类中的"sayhell"方法,并且要求这个方法必须是static -->
<bean id="hello4" class="com.it.sxd.SayHelloFactory" factory-method="sayhell">
<constructor-arg type="java.lang.String" value="静态工厂创建bean"></constructor-arg><!-- 为这个sayhell方法传递参数,参数类型是String类型,值是value -->
</bean> <!-- 测试3 静态工厂创建bean ,init-method初始化执行的方法 -->
<bean id="hello5" class="com.it.sxd.SayHelloFactory" init-method="sayAmount">
</bean> </beans>

4.分别测试一下上面的两个实现类的对不同bean的组合配置

SayHelloTest.java 最基本的测试 ,对应SayHelloImpl.java

 package com.it.sxd;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class SayHelloTest { @Test
public void testSayHello(){
//System.out.println(SayHelloTest.class.getResource(""));
//1.读取hello。xml配置文件,实例化一个Ioc容器
ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
//2.从Ioc容器中获取ID为"hello1"的bean ,此处是“面向接口编程 而不是面向实现编程”
SayHell sayHell = context.getBean("hello1",SayHell.class);
//3.实现功能
sayHell.sayHello();
} }

SayHelloTest2.java 有无参数的构造方法 对应SayHelloImpl2.java

 package com.it.sxd;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class SayHelloTest2 { @Test
public void testSayHello() {
ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
SayHell syahell = context.getBean("hello2",SayHell.class);//getBean()方法传进来两个参数 参数1:配置文件中bean的id 参数2:SayHell.class就是这个bean返回的结果强转为SayHell类型的
syahell.sayHello(); SayHell sayhell2 = (SayHell) context.getBean("alisa3");//如果geyBean()方法不传进来第二个参数,那就需要自己进行强转
sayhell2.sayHello(); String [] attr = context.getAliases("hello2");//getAliases() 获取id为hello2的bean的别名
for (String string : attr) {
System.out.println(string);
}
} }

SayHelloTest3.java

 package com.it.sxd;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; public class SayHelloTest3 {
@Test
public void sayHello(){
//1。通过加载配置文件来实例化一个Ioc容器,
ApplicationContext context = new FileSystemXmlApplicationContext("resources/hello.xml");
//2.从Ioc容器得到对应的bean
SayHell sayhell = context.getBean("hello4",SayHell.class);
//3.执行bean的方法
sayhell.sayHello(); SayHelloFactory sa = (SayHelloFactory) context.getBean("hello5"); }
}

运行的时候 右键 JUnit运行

---恢复内容结束---

---恢复内容结束---

【spring bean】bean的配置和创建方式的更多相关文章

  1. Spring Boot 优雅的配置拦截器方式

    https://my.oschina.net/bianxin/blog/2876640 https://cs.xieyonghui.com/java/55.html 其实spring boot拦截器的 ...

  2. Spring装配Bean的三种方式+导入和混合配置

    目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...

  3. 02 Spring框架 简单配置和三种bean的创建方式

    整理了一下之前学习Spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节学习了如何搭建SpringIOC的环境,下一步我们就来讨论一下如何利用ioc来管理对象和维护对象关系. <? ...

  4. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  5. Spring中Bean的配置:基于XML文件的方式

    Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...

  6. Spring三 Bean的三种创建方式

    创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...

  7. Spring的Java配置方式—@Configuration和@Bean实现Java配置

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...

  8. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  9. Spring中三种配置Bean的方式

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

随机推荐

  1. 新浪微博客户端(10)-切换多个fragment

    ViewController.m #import "ViewController.h" #import "DJOneViewController.h" #imp ...

  2. MongoDB的快速手动安装

    上一篇文章<MongoDB.WebIDE:升级版的Mongodb管理工具>漏了点东西:就是关于MongoDB主从库的安装配置和启动.网上关于MongoDB的安装有大量的文章供大家学习.我这 ...

  3. 如何在word里面插入目录

    点击“引用”->插入目录

  4. [转载]Using ngOptions In AngularJS

    http://odetocode.com/blogs/scott/archive/2013/06/19/using-ngoptions-in-angularjs.aspx?utm_source=tui ...

  5. PyOpenGL利用文泉驿正黑字体显示中文字体

    摘要:在NeHe的OpenGL教程第43课源代码基础上,调用文泉驿正黑字体实现中文字体的显示 在OpenGL中显示汉字一直是个麻烦的事情,很多中文书籍的文抄公乐此不疲地介绍各种方法及其在windows ...

  6. UESTC 1817 Complete Building the Houses

    Complete Building the Houses Time Limit: 2000MS Memory Limit: 65535KB 64bit IO Format: %lld & %l ...

  7. Robberies

     Robberies Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  8. 【风雪之隅】写在PHP7发布之际一些话 2015-12-02

    做开源也有4,5年的时间了,从最初的 Yaf,到今天的 PHP7,我参与的项目越来越多,使用我代码的用户也越来越多,明天就要发布的PHP7,绝对是我从事开源以来的一个最重要里程碑,我应该纪念一下今天, ...

  9. 技术分享:WIFI钓鱼的入门姿势

    简介 该实验先是搭建一个测试环境,然后创建一个假的无线接入点,把网络连接连接到假的接入点并且强迫用户连接假的无线点. 事先准备 1.无线网卡:无线网卡用于数据包的嗅探和注入. 2. Backtrack ...

  10. JSOI 2008 火星人prefix

    FROM http://www.lydsy.com/JudgeOnline/problem.php?id=1014 LCP问题 给定串 S[0..n] , 对于一对(a,b)其中0<a,b< ...