[spring-context]------@Configuration

本文深入探讨了Spring框架中@Configuration注解的起源及其四种启动方式,包括直接注册到ApplicationContext、XML配置、context:component-scan扫描及与@ComponentScan结合替代XML配置。通过实例代码展示了如何用Java代码替代传统XML配置,实现更简洁的Spring Bean管理。

@Configuration的由来

  • @Configuration是在Spring3.0之后出现的,其目的是为了简化原有的spring的xml配置。结合@Bean注解,实现了用Java代码的方式来管理spring-bean

@Configuration类的启动方式

第一种方式:将@Configuration类注册到AnnotationConfigApplicationContext中

  • AppConfig
@Configuration
public class AppConfig {

    @Bean
    public MySpringBean mySpringBean() {
        System.out.println("注册mySpringBean");
        MySpringBean mySpringBean = new MySpringBean();
        mySpringBean.setName("mySpringBeann");
        return mySpringBean;
    }
}
  • AppMainMethodOne
public class AppMainMethodOne {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MySpringBean mySpringBean = (MySpringBean) context.getBean("mySpringBean");
        System.out.println(mySpringBean);
    }
}

第二种方式:将@Configuration类当作普通的spring-bean,在xml文件中配置(其实这种方式有点本末倒置)

  • AppConfig
public class AppConfig {
    @Bean
    public MySpringBean mySpringBean() {
        System.out.println("注册mySpringBean");
        MySpringBean mySpringBean = new MySpringBean();
        mySpringBean.setName("mySpringBeann");
        return mySpringBean;
    }
}
  • configuration.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 https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

    <bean id="appConfig" class="org.hugh.spring.configuration.AppConfig"/>

</beans>
  • AppMainMethodTwo
public class AppMainMethodTwo {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:configuration.xml");
        MySpringBean mySpringBean = (MySpringBean) applicationContext.getBean("mySpringBean");
        System.out.println(mySpringBean);
    }
}

第三种方式:使用context:component-scan,(和二种方式一样,也是本末倒置)

修改configuration.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 https://www.springframework.org/schema/context/spring-context.xsd">

    <!--用于激活BeanPostProcessor-->
    <context:annotation-config/>
    <!-- identical with @ComponentScan-->
    <context:component-scan base-package="org.hugh.spring.configuration"/>

</beans>

第四种方式:@Configuration和@ComponentScan结合,替换xml配置文件

AppScanConfig
@Configuration
@ComponentScan("org.hugh.spring.bean")
public class AppScanConfig {
}
  • org.hugh.spring.bean.User
@Component
@Data
public class User implements Serializable {

    private static final long serialVersionUID = 5135661460008089536L;

    private String userName = "Jack";

    private Integer age = 18;
}
  • AppMainMethodFour
public class AppMainMethodFour {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppScanConfig.class);
        User user = (User) context.getBean("user");
        System.out.println(user);
    }
}

总结

  • 详细可查看@Configuration的文档说明
  • 代码地址:https://github.com/HughGilbert/my-develop-demo/tree/master/spring-demo/src/main/java/org/hugh/spring/configuration
<think>好的,用户想了解如何正确添加和使用Spring Context依赖。首先,我需要回忆一下Spring Context的基本作用,它是Spring框架的核心,负责依赖注入和Bean管理。然后,用户可能是在Maven或Gradle项目中需要添加这个依赖,所以我得提供两种构建工具的配置方法。 接下来,要确保引用的版本正确,特别是用户可能在使用不同版本的Spring,比如5.x或6.x。这里需要注意版本兼容性,尤其是Spring Boot的版本,因为Spring Boot通常管理着Spring相关依赖的版本。可能需要提醒用户根据Spring Boot版本来选择正确的spring-context版本,或者直接使用Spring Boot Starter来简化配置。 然后,用户可能需要一个简单的示例来演示如何使用,比如配置Bean和获取应用上下文。这部分需要代码示例,但根据用户提供的引用内容,他们可能是在Spring XML配置中遇到过问题,比如引用[1]中提到的配置dataSource和SqlSessionFactoryBean。所以,可能需要同时提供XML配置和基于Java注解的配置示例,以覆盖不同用户的需求。 另外,用户的问题中提到“正确添加和使用”,所以需要强调依赖的作用域,比如是否应该是compile还是其他,但通常Maven中默认就是compile。此外,可能需要注意与其他Spring模块的依赖冲突,比如如果用户同时引入了spring-web或其他模块,需要确保版本一致。 用户提供的引用中有关于Spring Cloud的内容,比如引用[3]提到spring-cloud-starter-loadbalancer,但这个问题主要关于spring-context,所以可能不需要深入讨论Cloud部分,除非有相关依赖冲突的问题需要提及。比如,如果用户在使用Spring Cloud时,可能需要确保spring-context的版本与Cloud兼容,但如果没有具体提到,可能暂时不需要涉及。 然后,常见问题部分需要考虑用户在实际添加依赖时可能遇到的错误,比如版本冲突、缺少其他必要依赖、配置错误等。例如,引用[2]中的BootstrapApplicationListener涉及上下文ID的设置,可能与应用上下文初始化有关,但和添加spring-context依赖关系不大,可能不需要特别提及,但可以提醒用户注意上下文配置是否正确。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如依赖管理工具、不同配置方式、常见异常处理等,这些都需要涵盖进去,以帮助用户全面了解如何正确使用spring-context。 总结步骤:添加依赖(Maven/Gradle)、配置应用上下文(XML/Java Config)、示例代码、常见问题及解决、相关问题扩展。需要确保引用中的内容如引用[1]的配置示例被适当融入,但用户的问题主要是关于依赖添加,所以重点在依赖配置部分。</think>### 如何正确添加和使用Spring Context依赖 #### 1. 添加依赖 Spring ContextSpring框架的核心模块,提供IoC容器、依赖注入、事件机制等功能。添加依赖的方式取决于项目构建工具: - **Maven项目** 在`pom.xml`中添加: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.30</version> <!-- 根据需求选择版本 --> </dependency> ``` - **Gradle项目** 在`build.gradle`中添加: ```groovy implementation 'org.springframework:spring-context:5.3.30' ``` > **注意**:若使用Spring Boot,建议通过`spring-boot-starter`统一管理版本: > ```xml > <dependency> > <groupId>org.springframework.boot</groupId> > <artifactId>spring-boot-starter</artifactId> > <version>2.7.18</version> > </dependency> > ``` > 此时会自动包含`spring-context`且版本兼容[^3]。 --- #### 2. 配置应用上下文 Spring Context的核心是`ApplicationContext`,支持XML和注解两种配置方式: - **XML配置** 创建`applicationContext.xml`并定义Bean: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="com.example.DataSourceImpl"/> <bean id="service" class="com.example.MyService"> <property name="dataSource" ref="dataSource"/> </bean> </beans> ``` 引用示例中提到的`dataSource`配置即为此类方式[^1]。 - **注解配置** 使用`@Configuration`和`@Bean`: ```java @Configuration public class AppConfig { @Bean public DataSource dataSource() { return new DataSourceImpl(); } @Bean public MyService myService() { return new MyService(dataSource()); } } ``` --- #### 3. 使用示例 通过`ApplicationContext`获取Bean: ```java public class Main { public static void main(String[] args) { // XML配置加载 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MyService service = context.getBean("service", MyService.class); // 注解配置加载 ApplicationContext annoContext = new AnnotationConfigApplicationContext(AppConfig.class); MyService annoService = annoContext.getBean(MyService.class); } } ``` --- #### 4. 常见问题与解决 - **依赖冲突** 若出现`NoSuchMethodError`或`ClassNotFoundException`,检查依赖版本是否一致。可通过`mvn dependency:tree`分析依赖树。 - **上下文ID冲突** Spring Cloud项目中可能因上下文ID强制设置为`bootstrap`导致冲突[^2],需确保主应用上下文与子模块隔离。 - **缺少必要依赖** `spring-context`依赖需搭配`spring-core`、`spring-beans`等模块,但构建工具(如Maven)会自动传递依赖。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值