【spring bean】bean的配置和创建方式
---恢复内容开始---
项目结构如下:
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的配置和创建方式的更多相关文章
- Spring Boot 优雅的配置拦截器方式
https://my.oschina.net/bianxin/blog/2876640 https://cs.xieyonghui.com/java/55.html 其实spring boot拦截器的 ...
- Spring装配Bean的三种方式+导入和混合配置
目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...
- 02 Spring框架 简单配置和三种bean的创建方式
整理了一下之前学习Spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节学习了如何搭建SpringIOC的环境,下一步我们就来讨论一下如何利用ioc来管理对象和维护对象关系. <? ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- Spring中Bean的配置:基于XML文件的方式
Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...
- Spring三 Bean的三种创建方式
创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...
- Spring的Java配置方式—@Configuration和@Bean实现Java配置
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
随机推荐
- 新浪微博客户端(10)-切换多个fragment
ViewController.m #import "ViewController.h" #import "DJOneViewController.h" #imp ...
- MongoDB的快速手动安装
上一篇文章<MongoDB.WebIDE:升级版的Mongodb管理工具>漏了点东西:就是关于MongoDB主从库的安装配置和启动.网上关于MongoDB的安装有大量的文章供大家学习.我这 ...
- 如何在word里面插入目录
点击“引用”->插入目录
- [转载]Using ngOptions In AngularJS
http://odetocode.com/blogs/scott/archive/2013/06/19/using-ngoptions-in-angularjs.aspx?utm_source=tui ...
- PyOpenGL利用文泉驿正黑字体显示中文字体
摘要:在NeHe的OpenGL教程第43课源代码基础上,调用文泉驿正黑字体实现中文字体的显示 在OpenGL中显示汉字一直是个麻烦的事情,很多中文书籍的文抄公乐此不疲地介绍各种方法及其在windows ...
- UESTC 1817 Complete Building the Houses
Complete Building the Houses Time Limit: 2000MS Memory Limit: 65535KB 64bit IO Format: %lld & %l ...
- Robberies
Robberies Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit S ...
- 【风雪之隅】写在PHP7发布之际一些话 2015-12-02
做开源也有4,5年的时间了,从最初的 Yaf,到今天的 PHP7,我参与的项目越来越多,使用我代码的用户也越来越多,明天就要发布的PHP7,绝对是我从事开源以来的一个最重要里程碑,我应该纪念一下今天, ...
- 技术分享:WIFI钓鱼的入门姿势
简介 该实验先是搭建一个测试环境,然后创建一个假的无线接入点,把网络连接连接到假的接入点并且强迫用户连接假的无线点. 事先准备 1.无线网卡:无线网卡用于数据包的嗅探和注入. 2. Backtrack ...
- JSOI 2008 火星人prefix
FROM http://www.lydsy.com/JudgeOnline/problem.php?id=1014 LCP问题 给定串 S[0..n] , 对于一对(a,b)其中0<a,b< ...