当前位置: 首页 > 互联网 > 正文

Spring的几种不同配置方法

基本概念

理解Spring框架的核心需要知道两个概念:IOC与DI。IOC(控制反转)指的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是通过配置方法如XML文件或配置类来控制,侧重于原理。DI(依赖注入)指的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。它们都是Spring核心思想的不同方面的描述。

上面已经讲过Spring的IOC配置可以通过XML文件或是配置类来控制,接下来就分别讲讲如何进行这种方式的配置。

代码方式

将那些需要放到Spring的IOC容器的类注释为@Component。有很多其它的注释也能实际同样的功能,比如:@Repository,@Service,@Controller。只是从注释类的命名上,能清晰的区别出注释类分别对应持久层,业务层和控制层(Web层)。例如:

[code lang=”java”]
package soundsystem;

public interface CompactDisc {
void play();
}
[/code]

[java]
package soundsystem;

import org.springframework.stereotype.Component;

@Component("sgtPeppers")
public class SgtPeppers implements CompactDisc {

private String title = "Sgt. Pepper’s Lonely Hearts Club Band";
private String artist = "The Beatles";

public void play() {
System.out.println("Playing " + title + "by" + artist);
}
}
[/java]

Spring配置类需要注释当前类是@Configuration,组件扫描注释@ComponentScan,还可在里面指定包含的basePackageClasses类名数组,或是basePackages包名数组等等。

[java]
package soundsystem;

@Configuration
@ComponentScan(basePackages={"soundsystem", "video"})
public class CDPlayerConfig {}
[/java]

最后,就是加载Spring配置,直接获取相应Bean,执行代码即可:

[java]
package soundsystem;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(CDPlayerConfig.class);
SgtPeppers sp = ac.getBean("sgtPeppers", SgtPeppers.class);
sp.play();
}
}
[/java]

Main程序中先加载Spring应用程序的上下文配置类,Spring会自动为标记为@Component等的类初始化成一个JavaBean,这里就是初始化了一个name是sgtPeppers的SgtPeppers实例。完毕后,在主程序中,可通过上下文ac调用getBean方法去Spring容器获取到这个JavaBean,之后就是可以使用这个对象进行一些操作。在这里,我们没有使用任何的new方法来初始化SgtPeppers实例,类的实例对代码而言是完全隐藏的,是Spring提供了这样一个容器,能帮助我们通过注释方法初始化一些实例。而我们只要在需要使用的时候,把它找出来就行。

XML配置方式

组件的定义方式基本不变,将Config配置类的文件转换成XML配置的方式。首先需要的是Spring认可的配置文件格式。其次,我们在配置类中定义了包或类的扫描范围,同样的也需要在XML配置文件中指定。

[xml]
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/>
<context:component-scan base-package="soundsystem" />
</beans>
[/xml]

在执行的过程中,加载是XML配置,需要初始化一个ClassPathXmlApplicationContext上下文。接下来的方式与上述Main函数过程一致,原理也是一样的。

[java]
package soundsystem;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

private static ClassPathXmlApplicationContext ac;

public static void main(String[] args) {
ac = new ClassPathXmlApplicationContext("classpath:spring.xml");

SgtPeppers sp = ac.getBean("sgtPeppers", soundsystem.SgtPeppers.class);
sp.play();
}
}
[/java]

总结

Spring的IOC容器是框架的核心之一。IOC与DI实现了类与类之间的松耦合,对象的初始化也由Spring去控制。程序员也可以通过XML配置方式注入类,这对加载外部框架方法是非常简单的,如在Spring框架中可以很简单的注册JDBC等等。通过Spring配置方法的学习,明白了Spring可以怎么去依赖注入。明白为什么会有@Controller,@Component,@Service等。这些也都是学习Spring框架的基础。

本文固定链接: http://www.byhard.com/?p=1495 | 海纳百川

该日志由 byhard 于2015年12月29日发表在 互联网 分类下,
原创文章转载请注明: Spring的几种不同配置方法 | 海纳百川
关键字: ,
【上一篇】
【下一篇】

Spring的几种不同配置方法:目前有2 条留言

  1. 沙发
    yiluyingxiao:

    提前祝您新年快乐。
    乙未年(羊)冬月廿十 2015-12-30

    2015-12-30 09:45
    • 同乐,同祝新年新气象。

      2015-12-30 16:31