02 Spring框架 简单配置和三种bean的创建方式
整理了一下之前学习Spring框架时候的一点笔记。如有错误欢迎指正,不喜勿喷。
上一节学习了如何搭建SpringIOC的环境,下一步我们就来讨论一下如何利用ioc来管理对象和维护对象关系。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:util="http://www.springframework.org/schema/util"
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-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
</beans>
这个是applicationContext.xml的 dtd。(补充上一节)
我们知道有以下集几种方法来创建对象:
- 采用new关键字创建对象
- 静态工厂方法,例如:Calendar cal=Calendar.getInstance();
- 对象(现有)工厂方法
所以ioc中在aplicationContext.xml中也对应了三种创建对象的途径
<bean id="" class="">①
<bean id="" class="" factory-method="">②
<bean id="" factory-bean="" factory-method="">③
id可以自定义
Class需要自己在工程中创建
接下来写一个简单的demo
①
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:util="http://www.springframework.org/schema/util"
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-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<bean id="c1" class="com.Spring.Demo.HelloWorld">
</beans>
HelloWorld.java :
package com.Spring.Demo;
public class HelloWorld {
public void show(){
System.out.println("欢迎Spring!");
}
}
接下来写一个测试
TestHelloWorld.java :
package com.Spring.Demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestHelloWorld {
public static void main(String[] args){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld hw=(HelloWorld)context.getBean("c1");
hw.show();
}
}
运行后控制台输出为:
欢迎Spring!
这是第一种创建对象的方式,下面我们继续看看怎么使用动态工厂创建对象。
②
<!--静态工厂创建对象配置文件-->
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:util="http://www.springframework.org/schema/util"
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-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<bean id="service" class="dynamicFactory.ServiceFactory" factory-method="getService"/>
</beans>
//需要创建的对象,实现的接口(接口化编程,降低耦合度)
package staticFactory;
public interface SomeServices {
String doFirst();
void doSecond();
}
//实现类,实现上面的接口
package staticFactory;
public class SomeServiceImp implements SomeServices{
@Override
public String doFirst() {
System.out.println("print first");
return null;
}
@Override
public void doSecond() {
System.out.println("print second");
}
}
//静态工厂,产生上面类的实例
package staticFactory;
public class ServiceFactory {
public static SomeServiceImp getService() {
return new SomeServiceImp();
}
}
//测试类(Junit)
public class test {
@Test
public void Test01() {
String resource = "staticFactory/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
SomeServices service = (SomeServices)ac.getBean("service");
service.doFirst();
service.doSecond();
}
}
控制台输出:
print first
print second
上面的是静态工厂bean的创建方式,接下来我们来看普通工厂对象创建方式:
③
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:util="http://www.springframework.org/schema/util"
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-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<bean id="serviceFactory" class="dynamicFactory.ServiceFactory"></bean>
<!--普通工厂bean,factory-bean填的是上面的serviceFactory-->
<bean id="service" factory-bean="serviceFactory" factory-method="getService"/>
</beans>
//需要创建的对象,实现的接口(接口化编程,降低耦合度)
package dynamicFactory;
public interface SomeServices {
String doFirst();
void doSecond();
}
//实现类,实现上面的接口
package dynamicFactory;
public class SomeServiceImp implements SomeServices{
@Override
public String doFirst() {
System.out.println("print first");
return null;
}
@Override
public void doSecond() {
System.out.println("print second");
}
}
//这个和第二种不同,这里的工厂类方法是非静态的
package dynamicFactory;
public class ServiceFactory {
public SomeServiceImp getService() {
return new SomeServiceImp();
}
}
//测试类(Junit)
public class test {
@Test
public void Test01() {
String resource = "dynamicFactory/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
SomeServices service = (SomeServices)ac.getBean("service");
service.doFirst();
service.doSecond();
}
}
控制台输出:
print first
print second
这样我们的三种创建方式就说完了。
未完待续
02 Spring框架 简单配置和三种bean的创建方式的更多相关文章
- Spring随笔 —— IOC配置的三种不同方式简介
在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式.除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉 ...
- 【转】Spring 中三种Bean配置方式比较
今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了. 以前Java框架基 ...
- Spring 中三种Bean配置方式比较
今天被问到Spring中Bean的配置方式,很尴尬,只想到了基于XML的配置方式,其他的一时想不起来了,看来Spring的内容还没有完全梳理清楚,见到一篇不错的文章,就先转过来了. 以前Java框架基 ...
- spring配置datasource三种方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp34 spring配置datasource三种方式 1.使用org.spri ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- 框架源码系列九:依赖注入DI、三种Bean配置方式的注册和实例化过程
一.依赖注入DI 学习目标1)搞清楚构造参数依赖注入的过程及类2)搞清楚注解方式的属性依赖注入在哪里完成的.学习思路1)思考我们手写时是如何做的2)读 spring 源码对比看它的实现3)Spring ...
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- 跟着刚哥学习Spring框架--事务配置(七)
事务 事务用来保证数据的完整性和一致性. 事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.1.原子性(atomicity).一个事务是一个不可分割的工作单位,事务 ...
- Spring mvc系列一之 Spring mvc简单配置
Spring mvc系列一之 Spring mvc简单配置-引用 Spring MVC做为SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 ...
随机推荐
- Google glog error LNK2001: unresolved external symbol "__declspec(dllimport) int fLI::FLAGS_XXXX 错误的解决。
想在 windows 下使用 glog,使用类似 FLAGS_max_log_size 来设置参数,结果编译报错. 解决办法是在 项目属性 -> C/C++ -> Preprocessor ...
- ToString(string format)输出格式简述
ToString说明 ToString 是 .NET Framework 中主要的格式化方法.它将对象转换为其字符串表现形式,使它适合于显示.(有关对 .NET Framework 中的格式设置支持的 ...
- PHP编译选项
PHP安装 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/u ...
- Git使用技巧(1)-- 配置【持续更新】
配置名字和邮箱 git config --global user.name "Your Name" git config --global user.email "ema ...
- js jQuery函数 $.ajax()
$.ajax() //$表示是jQuery cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中 ...
- makefile编写---单个子目录编译自动变量模板ok
1.自动化变量通配符http://blog.sina.com.cn/s/blog_7c95e5850101b38l.html 2.wildcard 使用http://blog.csdn.net/lia ...
- makefile编写---单个子目录编译模板
经过这次地库项目之后,虽然时间不久,跟团队在一起,虽然队员不一定在技术上有过人之处,但是来自大公司的员工,在工具使用和代码规范方面还是有点可鉴之处,在搭建主控模块是,就得面临makefile编写,因为 ...
- springmvc 生命周期
1A)客户端发出http请求,只要请求形式符合web.xml 文件中配置的*.action的话,就由DispatcherServlet 来处理. 1B)DispatcherServlet再将http请 ...
- 1. 写出一个能创建多级目录的 PHP 函数(新浪网技术部)
function create_dir($path,$mode){ if (is_dir($path)){ echo "该目录已经存在"; }else{ if(mkdir($pat ...
- 现代 PHP 新特性系列
生成器的创建和使用 http://laravelacademy.org/post/4317.html