Spring配置方式

Spring配置方式

第一阶段:xml配置

    在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,
咱们须要把xml配置文件分放到不一样的配置文件中,那时候须要频繁地在开发的类和配置文件间切换。java

第二阶段:注解配置

    在spring 2.x时代,随着JDK1.5带来的注解支持,spring提供了声明bean的注解,
大大减小了配置量。这时spring圈子存在一种争论:注解配置和xml配置究竟哪一个更好?咱们最终的选择是应用
的基本配置用xml,业务配置用户注解。spring

第三阶段:Java配置

    从spring 3.x到如今,spring提供了Java配置的能力,使用Java配置更好的理解
配置的bean。spring 4.x和spring boot都推荐使用Java配置。this

Java配置

Java配置经过@Configuration和@Bean来实现。

  • @Configuration声明当前类是一个配置类,至关于一个spring配置的xml文件
  • @Bean注解在方法上,声明当前方法的返回值为一个Bean。

示例

1. 编写一个功能类的Bean

public class FunctionService{
    
    public String sayHello(String word){
        return "hello "+ word + " !";
    }
    
}

此处没有使用@Service声明为Beancode

2. 使用功能类的Bean

// 1
public class UseFunctionService{
    @Autowired // 2
    FunctionService functionService;
    
    public void setFunctionService(FunctionService functionService){
        this.functionService = functinService;
    }
    
    public String SayHello(String word){
        return functionService.sayHello(word);
    }
}
代码解释
  1. 此处没有使用@Service声明Bean
  2. 自动注入Bean

3. 配置类

@Configuration // 1
public class JavaConfig{
    
    @Bean // 2
    public FunctionService functionService(){
        return new FunctionService();
    }
    
    @Bean
    public UseFunctionService useFunctionService(){
        UserFunctionService useFunctionService = new UseFunctionService();
        useFunctionService.setFunctionService(functionService()); // 3 为UseFunctionService注入functionService
        return useFunctionService;
    }
}
代码解释
  1. 使用@Configuration注解表示当前类是一个配置类,这意味着这个类里可能有0个或者多个@Bean注解,此处没有使用包扫描,是由于全部的Bean都在此勒种定义。
  2. 使用@Bean注解声明当前方法FunctionService的返回值是一个Bean,Bean的名称是方法名。
  3. 注入functionService的Bean时候直接调用functionService()方法。另一种注入的方式,直接将functionService做为参数给useFunctionService(),这也是spring容器提供的极好的功能。在spring容器中只要存在某个bean,就能够在另外的bean的声明方法的参数注入。
@Bean
public UseFunctionService useFunctioinService(FunctionService functionService){
    UserFunctionService useFunctionService = new UseFunctionService();
    useFunctionService.setFunctionService(functionService);
    return useFunctionService;
}

4. 运行

public class Main{
    public static void main(String[] args){
        // 使用注解配置工厂类,指定加载的配置类
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
        
        UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
        System.out.println(useFunctionService.SayHello("java config"));
        context.close();
    }
}

不管是xml配置、注解配置仍是Java配置,都被称做元数据,所谓元数据即描述数据的数据。元数据自己不具有任何可执行的能力,
只能经过外界的代码来对这些元数据行进行解析后再进行一些有意义的操做。Spring容器解析这些配置元数据进行Bean初始化、配
置和管理依赖。xml

声明Bean的注解有:开发

  • @Component,没有明确的角色
  • @Service 在业务逻辑层使用
  • @Repository 在数据访问层(dao层)使用
  • @Controller 在展示层使用

注入Bean的注解,通常状况下通用:get

  • @Autowired, Spring提供的注解
  • @Inject, JSR-330提供的注解
  • @Resource, JSR-250提供的主机

以上三个注解均可注解在set方法或者属性上。it

相关文章
相关标签/搜索