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

项目结构如下:

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. 新浪微博客户端(24)-计算原创微博配图frame

    DJStatus.h #import <Foundation/Foundation.h> @class DJUser; /** 微博 */ @interface DJStatus : NS ...

  2. SqlDataReader读取分页数据,pageCount你是肿么了?

    自己在折腾代码的时候发现,SqlDataReader读取分页数据,存储过程中的输出参数总页数pageCount获取不准确. 我已经问过百度,技术群等..... 都说SqlDataReader用过后关闭 ...

  3. GTP (GPRS隧道协议(GPRSTunnellingProtocol))

    GTP (GPRS隧道协议(GPRSTunnellingProtocol)) GTP (GPRS隧道协议(GPRSTunnellingProtocol)) 编辑 本词条缺少信息栏.名片图,补充相关内容 ...

  4. MyISAM 与 InnoDB 的区别

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  5. TYVJ1359 收入计划

    描述     高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱.从今天起,Matrix67将连续工作N天(1<=N<=100 000).每一天末他可以领取当天及前面若干天里没有 ...

  6. rails命令避免直接操作数据库

    文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 今天在数据库里新增人员的时候出了点小问题,有人员重复了,以至于要删除一些,大师和pp指导完成的. $r ...

  7. 正则匹配之url的匹配

    通过这几天的学习,已经对正则有所了解了. 下面动手写一个匹配url的正则吧. <?php $str="http://www.baidu.com"; $reg="/( ...

  8. 代码风格与树形DP

    Streaming很惨,不过因为比赛之间没有提交过就没掉(或掉了)rating.第二题是一个树形DP,但是我都在想第一题了,简直作死. 看着神犇的代码我也是醉了...各种宏,真是好好写会死系列. 看到 ...

  9. (转载)【Android】ViewGroup全面分析

    转载自:http://www.cnblogs.com/lqminn/archive/2013/01/23/2866543.html 一个Viewgroup基本的继承类格式如下: import andr ...

  10. 查看一些特定sql需求的书写

    user表,5个人abcde,  content表10篇文章,一个人对应两篇文章,有 time字段,查询出五个人的最新文章. select a.id,a.SName,a.ClsNo,a.Scorefr ...