Spring容器中基于Java源代码的配置

Spring容器中有三种配置方式(链接如下):

①基于Xml的配置

基于注解的配置

③基于Java源代码的配置        

目录

一、添加配置类

二、例子

1.MovieFinder接口

2.CSMovieFinder类

3.MemMovieFinder类

4.MovieLister类

6.AppConfiguration配置类

5.Main类

三、三种配置混合使用


        基于注解的配置存在@Bean分散的问题,为了方便集中查看,添加一个配置类来存放@Bean方法就是基于Java源代码的配置。

一、添加配置类

@Configuration注解

        定义当前类为配置类,相当于Xml配置文件,包含一个或多个@Bean注解的方法

二、例子

1.MovieFinder接口

public interface MovieFinder {
    void findAll();
}

2.CSMovieFinder类

        MovieFinder接口的实现类

public class CSMovieFinder implements MovieFinder {
    @Override
    public void findAll() {
        System.out.println("在CSV文件中查找电影作品");
    }
}

3.MemMovieFinder类

        MovieFinder接口的实现类

public class MemMovieFinder implements MovieFinder {
    @Override
    public void findAll() {
        System.out.println("在内存中查找");
    }
}

4.MovieLister类

/*
@RequiredArgsConstructor (lombok注解):构造方法注入
可替代:@Autowired
       public MovieLister(@NonNull MovieFinder movieFinder) {
           this.movieFinder = movieFinder;
       }
*/
@RequiredArgsConstructor
public class MovieLister {
  // 依赖(关联)--------
    private final MovieFinder movieFinder;

    public void directedBy() {
        this.movieFinder.findAll();
    }
}

6.AppConfiguration配置类

 优先级:@Qualifier  >  @Primary

@Configuration //定义当前类为配置类,包含一个或多个@Bean注解的方法
public class AppConfiguration {
    @Bean  //@Bean(name = "cS.finder") 可以指定名字,如果未指定,则默认为该方法名
    public MovieFinder cSFinder() {
        return new CSMovieFinder();
    }

    @Bean
//    @Primary 指定该Bean优先
    public MovieFinder memFinder() {
        return new MemMovieFinder();
    }
    
//    @Qualifier("") 限定符,指定注入哪个Bean
    @Bean
    public MovieLister movieLister(@Qualifier("cSFinder") MovieFinder movieFinder) {
        return new MovieLister(movieFinder);
    }
}

5.Main类

public class Main {
    public static void main(String[] args) {
        //通过配置类找Bean
        var container = new AnnotationConfigApplicationContext(AppConfiguration.class); 

        var movieLister = container.getBean(MovieLister.class);
        movieLister.directedBy();
        var movie = container.getBean("memFinder",MovieFinder.class);
        movie.findAll();
    }
}

三、三种配置混合使用

 在自定义的配置类中,注解通过@ComponentScan,Xml通过@ImportResource

 @ComponentScan:默认会扫描该类所在的包,自动装配到spring的bean容器中。

                                  若要指定扫描的包,则使用valule属性,@ComponentScan(value = "  ")

 @ImportResource:导入Spring的配置文件,@ImportResource("classpath:配置文件名")。

 三种配置的优先级:Xml  >  Java源代码  >  注解

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值