spring 配置的三种方式:XML配置,JAVA配置和注解配置

spring自从3.0开始以后,就全面推荐使用配置的方式进行代码编写了,这种方式确实可以避免了之前一个项目里面一大堆XML的情况,毕竟XML的可读性实在不怎么样,而且一会写JAVA,一会写XML,确实还是蛮麻烦的 。

注释配置和 XML 配置的适用场合

是否有了这些 IOC 注释,我们就可以完全摒除原来 XML 配置的方式呢?答案是否定的。有以下几点原因:

  • 注释配置不一定在先天上优于 XML 配置。如果 Bean 的依赖关系是固定的,(如 Service 使用了哪几个 DAO 类),这种配置信息不会在部署时发生调整,那么注释配置优于 XML 配置;反之如果这种依赖关系会在部署时发生调整,XML 配置显然又优于注释配置,因为注释是对 Java 源代码的调整,您需要重新改写源代码并重新编译才可以实施调整。
  • 如果 Bean 不是自己编写的类(如 JdbcTemplateSessionFactoryBean 等),注释配置将无法实施,此时 XML 配置是唯一可用的方式。
  • 注释配置往往是类级别的,而 XML 配置则可以表现得更加灵活。比如相比于 @Transaction 事务注释,使用 aop/tx 命名空间的事务配置更加灵活和简单。

所以在实现应用中,我们往往需要同时使用注释配置和 XML 配置,对于类级别且不会发生变动的配置可以优先考虑注释配置;而对于那些第三方类以及容易发生调整的配置则应优先考虑使用 XML 配置。Spring 会在具体实施 Bean 创建和 Bean 注入之前将这两种配置方式的元信息融合在一起。


就目前来说spring的配置方式一般三种:XML配置,JAVA配置和注解配置。那么什么的是注解配置呢?什么是JAVA配置呢?
//注解配置:
@Service
@Component
@Repository
@Controlle
  • 1
  • 2
  • 3
  • 4
  • 5
//JAVA配置
@Confirguration 相当于spring的配置文件XML
@Bean 用到方法上,表示当前方法的返回值是一个bean
  • 1
  • 2
  • 3

这两种方法的区别在于如果使用注解的方式,那么你需要在Serivce层,DAO层的时候,需要在类上进行注解,就可获得spring的依赖注入:

package di;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//注解配置
@Service 
public class UseFunctionService {
    @Autowired
    FunctionService functionService;

    public String sayHello(String word) {
        return functionService.toHello(word);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

如果使用java配置的方式,那么就不需要在类上写注解了,直接在配置类里面进行申明即可:

package javaconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JavaConfig {
    //通过这种方式,获得spring的依赖注入
    @Bean
    public UseFunctionService useFunctionService () {
        return new UseFunctionService ();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这两种方式没有什么所谓的优劣之分,主要看使用情况,一般来说是这样:

  • 涉及到全局配置的,例如数据库相关配置、MVC相关配置等,就用JAVA配置的方式
  • 涉及到业务配置的,就使用注解方式

猜你喜欢

转载自blog.csdn.net/qq_21508727/article/details/80773252