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 模块 ...
随机推荐
- Hash索引和BTREE索引2
索引是数据库中用来提高性能的最常用工具.所有MySql列类型都可以被索引.索引用于快速找出在某个列中有一特定值的行.如果不使用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行.常用的 ...
- NGINX date_udf 定义日志
Nginx日志自动按日期存储 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性 ...
- php 远程调用redis
<?php $redis_conf = array ( "active_code"=>array( "host" => "14.29 ...
- 第一百八十七节,jQuery,知问前端--cookie 插件,注册成功后生成cookie,显示登录状态
jQuery,知问前端--cookie 插件 学习要点: 1.使用 cookie 插件 2.注册直接登录 Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购 ...
- c 编译异常 switch 之a label can only be part of a statement and a declaration is not a statement
client.c:996: error: a label can only be part of a statement and a declaration is not a statement sw ...
- js instanceof (2)
instanceof运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上.实例一:普遍用法 A instanceof B :检测B.prototype是否存在于参 ...
- iOS 实现从后台切换到前台-复制分享宝贝内容,打开淘宝APP,自动弹出宝贝提示信息
- (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"\n ===> 程序重新激活 !&q ...
- OpenCV学习笔记:opencv_core模块
一,简介: opencv最基础的库.包含exception,point,rect,size,slice,vector,matrix,image等数据结构,和相应的操作函数,以及一些基础算法. 二,分析 ...
- 队列实现 (双向循环链表 C++)
队列是非常easy的.可是用数组实现可能更好点. . (事实上我认为数组在多个队列的时候更难) 然后我是第一次写双向循环链表.指向太乱了. 我这里是依照自己的想法.建立了一个头节点,一个尾节点,然后依 ...
- okhttp 通过网关请求服务端返回数据
1.启动类代码 package com.tycoon.service; import org.springframework.boot.SpringApplication; import org.sp ...