Ⅰ.Spring的点点滴滴--序章

 

spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架


.net篇(环境为vs2012+Spring.Core.dll

新建一个控制台

using Spring.Context;
using Spring.Context.Support;
using System;
namespace SpringBase{
class Program {
static void Main(string[] args){
IoCMethod();
Console.ReadLine();
}
private static void IoCMethod() {
IApplicationContext ctx = ContextRegistry.GetContext("test");
IPersonDao dao = ctx.GetObject("PersonDao") as IPersonDao;
if (dao != null) {
dao.sayhello();
}
}
}
public class PersonDao : IPersonDao {
public void sayhello() {
Console.WriteLine("hello");
}
}
public interface IPersonDao{
void sayhello();
}
}

添加2个配置文件

app.config(如果是web项目肯定是web.config)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="typeAliases"
type="Spring.Context.Support.TypeAliasesSectionHandler, Spring.Core"/>
<section name="context"
type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects"
type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<typeAliases>
<alias name="PersonDaoAlias" type="SpringBase.PersonDao,SpringBase" />
</typeAliases>
<context name="test">
<resource uri="config://spring/objects" />
<!--<resource uri="file://objects.xml" />-->
</context>
<objects xmlns="http://www.springframework.net">
<description>一个简单的控制反转例子</description>
<object id="PersonDao" type="PersonDaoAlias" singleton="false" />
</objects>
</spring>
</configuration>

objects.xml

<objects xmlns="http://www.springframework.net">
<description>一个简单的控制反转例子</description>
<object id="PersonDao" type="SpringBase.PersonDao, SpringBase" />
</objects>

app.configresource选择为注释掉的那一条的时候, 资源配置文件为当前目录下的objects.xml文件, 里面的xmlns属性是对节点的规范在vs中会自动提示节点

  1. file://表示文件目录并且是相对于程序的目录
  2. config://表示的是配置节点上的某个节点,
  3. typeAliases表示type的别名,所以配置文件和xml文件上面的type参数不一样, 但是2个文件的效果是一样的
  4. singleton参数表示这个实例是否为单例,默认为false
  5. id为程序中所调用这个实例的name, 也可以设置为name="PersonDao" type="PersonDaoAlias"效果是一样的
  6. 当配置节点中context只有一个的时候可以不添加name属性, 程序中直接通过ContextRegistry.GetContext()获得程序的上下文

java篇(环境为Maven+Jdk1.7

新建一个空的maven项目,在pom.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springbase</groupId>
<artifactId>springdemo</artifactId>
<version>1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

在META-INF下的MANIFEST.MF文件配置当main函数和引用的jar包

Manifest-Version: 1.0
Class-Path: lib/aopalliance-1.0.jar lib/commons-logging-1.1.1.jar lib/
spring-aop-3.2.4.RELEASE.jar lib/spring-beans-3.2.4.RELEASE.jar lib/s
pring-context-3.2.4.RELEASE.jar lib/spring-core-3.2.4.RELEASE.jar lib
/spring-expression-3.2.4.RELEASE.jar
Main-Class: springdemo.SpringBase

新建一个类一个接口一个main入口

IPersonDao.java

package springdemo;
public interface IPersonDao {
void sayhello();
}

PersonDao.java

package springdemo;
public class PersonDao implements IPersonDao {
public void sayhello() {
System.out.println("Hello World!");
}
}

SpringBase.java

package springdemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SpringBase {
public static void main(String[] args) {
ApplicationContext ctx =
new FileSystemXmlApplicationContext("classpath:bean.xml");
IPersonDao dao = (IPersonDao) ctx.getBean("PersonDao");
if (dao != null) {
dao.sayhello();
}
}
}

以及一个和csharp差不多的配置文件 bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="PersonDao" class="springdemo.PersonDao" singleton="false"/>
</beans>

然后mark当前模块会输出一个jar包, 在cmd上面输入java -jar springdemo.jar就可以看到helloword 的效果(前面附带一些spring的实例化日志)

  1. classpath表示是项目的目录下的文件,当然也存在file://等一系列的地址规范
  2. singleton表示当前对象是否为单例,默认为false和C#一样
  3. id也可以用name属性和效果是一样的

从上面可以看出javac#几乎是一样的,几乎类名的都不多, 而且我们实例化一个对象可以直接通过xml来配置,而不需要改代码


 
 
 

最新文章

  1. APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
  2. iOS远程推送1
  3. nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容
  4. CSS 通用和分组选择器(十)
  5. 【转】ffmpeg参数中文详细解释
  6. TeeChart曲线平滑 Line.Smoothed
  7. Sybase ASE安装过程报错,无法创建数据库设备[AM fork() failed]
  8. 实现一个线程安全的Queue队列
  9. iOS开发之性能优化
  10. CodeForce 439C Devu and Partitioning of the Array(模拟)
  11. MongoDB学习笔记-维护
  12. OBS源码解析(1)main函数
  13. Duilib第一步(II)-Hello World
  14. 高效求a的n次幂的算法
  15. M2postmortem
  16. Eclipse使用Maven2的一次环境清理记录
  17. 第二阶段——个人工作总结DAY09
  18. Oracle数据库使用mybatis的时候,实体类日期为Date类型,mybatis里面定义的是Date类型,插入的时候,时分秒全部是12:00:00问题
  19. 使用国内镜像源安装npm包报错
  20. 拷贝内容到eclipse中导致JSP的auto-completion不工作

热门文章

  1. IOS 警告 收集
  2. android activity 后的形式 藏
  3. PHP连接Access数据库代码
  4. Winform中node.Text重命名时窗口无响应假死的解决方法
  5. 再谈IE的浏览器模式和文档模式
  6. struts2的Action该方法不能去
  7. Linux经常使用命令(一) - ls
  8. NGUI ScrollView动态加入和删除对象。
  9. Apache无法启动解决 the requested operation has failed
  10. Windows 7的 磁盘管理中,某个磁盘或分区,突然变成只读。