iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java怎么使用注解来配置Spring容器
  • 719
分享到

Java怎么使用注解来配置Spring容器

2023-07-02 08:07:49 719人浏览 泡泡鱼
摘要

这篇文章主要介绍了Java怎么使用注解来配置spring容器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么使用注解来配置Spring容器文章都会有所收获,下面我们一起来看看吧。介绍我们将介绍如何在J

这篇文章主要介绍了Java怎么使用注解来配置spring容器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么使用注解来配置Spring容器文章都会有所收获,下面我们一起来看看吧。

介绍

我们将介绍如何在Java代码中使用注解来配置Spring容器。它包括:

  • Basic Concepts: @Bean and @Configuration。

  • Instantiating the Spring Container by Using 。

  • AnnotationConfigApplicationContext。

  • Using the @Bean Annotation。

  • Using the @Configuration annotation。

  • Composing Java-based Configurations。

  • Bean Definition Profiles。

  • PropertySource Abstraction。

  • Using @PropertySource。

  • Placeholder Resolution in Statements。

@Bean and @Configuration

@Bean注解用在一个方法上表示实例化、配置和初始化一个新对象,由Spring ioc容器管理。对于那些熟悉Spring的 XML配置的人来说,@Bean注解的作用与元素的作用相同。

用@Configuration来注解一个类,表明它的主要目的是作为一个bean定义的来源。此外,@Configuration类允许通过调用同一个类中的其他@Bean方法来定义Bean间的依赖关系。最简单的@Configuration类如下:

@Configurationpublic class AppConfig {    @Bean    public MyService myService() {        return new MyServiceImpl();    }     @Bean    public OtherService otherService() {        return new OtherService();    }}

AnnotationConfigApplicationContext实例化容器

与实例化

ClassPathXmlApplicationContext时使用Spring XML文件作为输入的方式相同,你可以在实例化AnnotationConfigApplicationContext时使用@Configuration类作为输入。这使得Spring容器的使用完全不需要XML,如下例子:

public static void main(String[] args) {    ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);    MyService myService = ctx.getBean(MyService.class);    myService.doStuff();}

通过使用 reGISter(Class...) 以编程方式构建容器

你可以通过使用无参数构造函数来实例化AnnotationConfigApplicationContext,然后使用 register() 方法来配置它。这种方法在以编程方式构建 AnnotationConfigApplicationContext 时特别有用。下面的例子展示了如何做到这一点。

public static void main(String[] args) {    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();    ctx.register(AppConfig.class, OtherConfig.class);    ctx.register(AdditionalConfig.class);    ctx.refresh();    MyService myService = ctx.getBean(MyService.class);    myService.doStuff();}

@ComponentScan启用组件扫描

为了启用组件扫描,可以在@Configuration类做如下注释。

@Configuration@ComponentScan(basePackages = "com.acme") public class AppConfig  {    // ...}

Bean的依赖

@Configurationpublic class AppConfig {    @Bean    public TransferService transferService(AccountRepository accountRepository) {        return new TransferServiceImpl(accountRepository);    }}

生命周期回调

任何用@Bean注解定义的类都支持常规的生命周期回调,并且可以使用jsR-250的@PostConstruct和@PreDestroy注解。如果一个bean实现了InitializingBean、DisposableBean或Lifecycle,它们各自的方法将被容器调用。

public class BeanOne {    public void init() {        // initialization logic    }}public class BeanTwo {    public void cleanup() {        // destruction logic    }}@Configurationpublic class AppConfig {    @Bean(initMethod = "init")    public BeanOne beanOne() {        return new BeanOne();    }    @Bean(destroyMethod = "cleanup")    public BeanTwo beanTwo() {        return new BeanTwo();    }}

Bean指定作用域

Bean默认的作用域是singleton,更多Bean作用域可参考Bean作用域章节。

@Configurationpublic class MyConfiguration {    @Bean    @Scope("prototype")    public Encryptor encryptor() {        // ...    }}

自定义bean名称

默认情况下,配置类使用@Bean方法的名称作为Bean的名称。可以通过name属性来自定义名称,如下:

@Configurationpublic class AppConfig {    @Bean("myThing")    public Thing thing() {        return new Thing();    }}

Bean别名

@Configurationpublic class AppConfig {    @Bean({"dataSource", "subsystemA-dataSource", "subsystemB-dataSource"})    public DataSource dataSource() {        // instantiate, configure and return DataSource bean...    }}

Bean注入之间的依赖

@Configurationpublic class AppConfig {    @Bean    public BeanOne beanOne() {        return new BeanOne(beanTwo());    }    @Bean    public BeanTwo beanTwo() {        return new BeanTwo();    }}

@Import

@Import注解表示要导入一个或多个@Configuration类。在导入的@Configuration类中声明的@Bean定义应该通过使用@Autowired注入来访问。

@Configurationpublic class ConfigA {    @Bean    public A a() {        return new A();    }}@Configuration@Import(ConfigA.class)public class ConfigB {    @Bean    public B b() {        return new B();    }}

现在,在实例化上下文时不需要同时指定ConfigA类和ConfigB类,而只需要明确提供ConfigB:

public static void main(String[] args) {    ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);    // now both beans A and B will be available...    A a = ctx.getBean(A.class);    B b = ctx.getBean(B.class);}

@ImportResource

Spring提供了一个@ImportResource注解,用于从applicationContext.xml文件中加载bean到应用上下文中。

@Configuration@ImportResource("classpath:/com/acme/properties-config.xml")public class AppConfig {    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.passWord}")    private String password;    @Bean    public DataSource dataSource() {        return new DriverManagerDataSource(url, username, password);    }}
<!-- properties-config.xml --><beans>    <context:property-placeholder location="classpath:/com/acme/jdbc.properties"/></beans>

@PropertySource

我们将讨论如何使用@PropertySource来读取属性文件,并用@Value和Environment来显示值。

@PropertySource注解为向Spring的环境添加PropertySource提供了一种方便的声明性机制。要与@Configuration类一起使用。

假设我们从config.properties文件中读取数据库配置,并使用Environment将这些属性值设置为DataSourceConfig类。

@Configuration@PropertySource("classpath:config.properties")public class ProperySourceDemo implements InitializingBean {    @Autowired    Environment env;    @Override    public void afterPropertiesSet() throws Exception {        setDatabaseConfig();    }    private void setDatabaseConfig() {        DataSourceConfig config = new DataSourceConfig();        config.setDriver(env.getProperty("jdbc.driver"));        config.setUrl(env.getProperty("jdbc.url"));        config.setUsername(env.getProperty("jdbc.username"));        config.setPassword(env.getProperty("jdbc.password"));        System.out.println(config.toString());    }}

支持多个properties文件

@Configuration @PropertySources({  @PropertySource("classpath:config.properties"),  @PropertySource("classpath:db.properties") }) public class AppConfig {  //... }

ApplicationContext

ApplicationContext实现了BeanFactory接口,并提供了如下功能:

  • 通过MessageSource接口,访问i18n风格的消息。

  • 通过ResourceLoader接口访问资源,如URL和文件。

  • 事件发布,即通过使用ApplicationEventPublisher接口,向实现ApplicationListener接口的bean发布。

  • 通过HierarchicalBeanFactory接口加载多个(分层的)上下文,让每个上下文专注于一个特定的层,例如一个应用程序的WEB层。

MessageSource 国际化

ApplicationContext接口扩展了一个名为MessageSource的接口,因此,它提供了国际化("i18n")功能。Spring还提供了HierarchicalMessageSource接口,它可以分层次地解析消息。

account.name=TestAccount
@Configurationpublic class AppConfig {    @Bean    public MessageSource messageSource() {      ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();      messageSource.setBasename("config/messages");      return messageSource;    }}
@Servicepublic class AccountService {    @Autowired    private MessageSource messageSource;        public void someMsg() {        messageSource.getMessage("account.name", null, Locale.ENGLISH);        //todo    }}

关于“Java怎么使用注解来配置Spring容器”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java怎么使用注解来配置Spring容器”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Java怎么使用注解来配置Spring容器

本文链接: https://www.lsjlt.com/news/340551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java怎么使用注解来配置Spring容器
    这篇文章主要介绍了Java怎么使用注解来配置Spring容器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么使用注解来配置Spring容器文章都会有所收获,下面我们一起来看看吧。介绍我们将介绍如何在J...
    99+
    2023-07-02
  • 详解Java如何使用注解来配置Spring容器
    目录介绍@Bean and @ConfigurationAnnotationConfigApplicationContext实例化容器通过使用 register(Class...) ...
    99+
    2024-04-02
  • 如何使用注解配置Spring容器
    这篇文章给大家分享的是有关如何使用注解配置Spring容器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:@Configuration标注在类上,相当于将该类作为spring的xml的标签@Configu...
    99+
    2023-05-30
    spring
  • 使用Spring MVC4 如何配置注解
    使用Spring MVC4 如何配置注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式...
    99+
    2023-05-31
    springmvc 注解配置
  • Java Spring之基于注解的AOP怎么配置
    本篇内容主要讲解“Java Spring之基于注解的AOP怎么配置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java Spring之基于注解的AOP怎么配置”吧!1 环境搭建1.1 第一步:...
    99+
    2023-07-05
  • Spring使用注解和配置文件配置事务
    本文实例为大家分享了Spring使用注解和配置文件配置事务的具体代码,供大家参考,具体内容如下 需求图: 使用注解配置事务: package com.atguigu.spring...
    99+
    2024-04-02
  • 使用Spring Aop如何配置AspectJ注解
    这篇文章将为大家详细讲解有关使用Spring Aop如何配置AspectJ注解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。采用的jdk代理,接口和实现类代码请参考上篇博文。主要是将Aspe...
    99+
    2023-05-31
    springaop aspectj
  • 在Spring中AOP怎么使用注解来实现
    这期内容当中小编将会给大家带来有关在Spring中AOP怎么使用注解来实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。spring对AOP的实现提供了很好的支持。下面我们就使用Spring的注解来完成A...
    99+
    2023-05-31
    spring aop
  • 如何使用纯java config来配置spring mvc方式
    这篇文章将为大家详细讲解有关如何使用纯java config来配置spring mvc方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用xml配置spring是大部分...
    99+
    2023-06-21
  • 使用Spring中的scope配置和@scope注解
    目录Spring的scope配置和@scope注解1. Spring的作用域在装配Bean2. 基于注解开发时Spring中的scope详解1. scope概论2...
    99+
    2024-04-02
  • Spring使用@Value注解与@PropertySource注解加载配置文件操作
    1、@Value注解简介 Spring框架提供的@Value注解可以将外部的值动态注入到Bean中,@Value注解使用在字段、构造器参数和方法参数上。 @Value可以指定属性取值...
    99+
    2024-04-02
  • Spring注解@Scope怎么使用
    @Scope注解用于指定Bean的作用域。Spring提供了多种作用域可选,包括Singleton、Prototype、Reques...
    99+
    2023-08-18
    Spring
  • Spring Java-based容器配置的示例分析
    这篇文章主要介绍了Spring Java-based容器配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。装Java-based的配置使用 @Import 注解跟在...
    99+
    2023-05-31
    spring java
  • spring @Component注解怎么使用
    @Component注解是用来标识一个类是Spring容器的一个组件。使用@Component注解的类会被Spring自动扫描并加入...
    99+
    2023-09-23
    spring
  • Spring的注解怎么使用
    这篇“Spring的注解怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring的注解怎么使用”文章吧。非全注解开...
    99+
    2023-06-29
  • Spring注解@Import怎么使用
    今天小编给大家分享一下Spring注解@Import怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正文在项目开发的过...
    99+
    2023-07-05
  • spring的父子容器及配置详解
    spring父子容器spring总的上下文容器有父子之分,父容器和子容器。 ** 父容器对子容器可见,子容器对父容器不可见 ** 。对于传统的spring mvc来说,spring mvc容器为子容器,也就是说ServletDispatch...
    99+
    2023-05-30
  • Java之Spring注解配置bean实例代码解析
    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的。故而,请使用注解配置bean !!!【1】注解类别@Component : 基本注解, 标识了一个受 Spring(点击这里可以下载《Spring应用开发完全手册》)...
    99+
    2023-05-31
    java spring bean
  • 如何使用Spring中的scope配置和@scope注解
    本文小编为大家详细介绍“如何使用Spring中的scope配置和@scope注解”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Spring中的scope配置和@scope注解”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • Spring容器BeanFactory怎么使用
    本篇内容主要讲解“Spring容器BeanFactory怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring容器BeanFactory怎么使用”吧!Spring容器什么是Sprin...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作