Spring配置Bean的几种方式

本文介绍了Spring容器装配Bean的三种方式:隐式Bean发现与自动装配,基于Java的配置,以及基于XML的配置。详细讲解了@Component注解、@Autowired自动注入、@Configuration和@Bean注解的使用,以及XML配置文件的编写。

​ Spring容器提供了三种装配bean的方式,所谓装配就是指将bean配置在spring容器中,并能够在类与类之间提供依赖关系。

一、隐式Bean发现机制和自动装配

​ Spring从两个角度来实现自动化装配:组件扫描(Spring自动发现应用中上下文所需要的创建的Bean),自动装配(Spring自动满足Bean之间的依赖)

  • 使用Component注解将普通类配置成Bean

    @Component用来泛指组件,用于不好区分或者明确归类的Java类,相比之下,使用@Controller,@Service,@Respository等注解声明为bean可以明确的表示组件的归类

    @Component
    public class Waiter {
        public void service(String name){
            System.out.println("service to " + name);
        }
    }
    
  • 使用@Autowired(自动注入)使Spring满足Bean的依赖

    @Autowired是由Spring提供的注解,同样的,你还可以通过使用Java本身提供的注解@Resource实现依赖注入

    @Component
    public class User {
    
        @Autowired
        private Article article;
    
        public void action() {
            article.action();
        }
    }
    
  • 使用@Component注解扫描组件

    默认是扫描当前包以及子包。如果想设置其它包或者多个包,可以通过设置该注解的basePackages。

    @Configuration
    @ComponentScan("包名路径")
    public class ApplicationConfig {
        
    }
    
二、基于Java的Bean装配

​ 我们可以使用@Configuration注解将类声明为一个配置类,再使用@Bean注解将方法返回的实例对象添加到容器的上下文中

@Bean注解的bean的ID默认是方法名,如果要指定名称,可以通过name属性来设置

@Configuration
@ComponentScan("com.jimisun")
public class WebConfig {

    @Bean
    public User user() {
        return new User(myArticle());
    }

    @Bean
    public MyArticle myArticle() {
        return new MyArticle();
    }

}
三、基于XML的Bean装配

​ 不使用注解时,可以在spring的xml文件中配置bean

<?xml version="1.0" encoding="UTF-8"?>
<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-4.0.xsd">

    <bean class="com.jimisun.spring.example.User" id="user">
        <constructor-arg ref="myArticle"/>
    </bean>

    <bean class="com.jimisun.spring.example.MyArticle" id="myArticle"></bean>

</beans>
  • 上述配置方案都不是互斥的,你甚至可以将JavaConfig、自动装配、xml配置混合在一起。
### Spring框架中配置Bean的不同方法 #### 使用XML配置文件 通过XML配置文件来定义和配置Spring中的bean是最传统的方式之一。开发者可以在`applicationContext.xml`或其他自定义命名的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 --> <bean id="exampleBean" class="com.example.ExampleClass"> <!-- 设置构造参数 --> <constructor-arg value="someValue"/> <!-- 或者设置属性 --> <property name="propertyName" value="propertyValue"/> </bean> </beans> ``` 这种方式下,所有的bean定义信息最终都会被转换成`BeanDefinition`的形式存储起来[^1]。 #### 基于Java类的配置方式 随着版本迭代,Spring引入了基于Java类来进行bean配置的支持,这使得代码更加简洁易懂,并且可以充分利用编译期检查的优势。 ```java @Configuration public class AppConfig { @Bean public ExampleClass exampleBean(){ return new ExampleClass(); } } ``` 这种方法不仅能够替代传统的XML配置,还可以更方便地实现复杂的逻辑判断以及动态调整bean的行为。 #### 注解驱动的自动装配机制 为了简化开发流程并提高灵活性,Spring提供了多种注解用于快速完成bean之间的关联工作。比如: - `@Component`: 表明该类是一个组件,可用于扫描路径下的自动注册; - `@Autowired`: 自动注入其他bean实例; - `@Qualifier`: 当存在多个同类型的bean时指定特定的一个进行注入; 这些特性共同构成了强大的DI(Dependency Injection)功能,在不需要显式编写大量配置的情况下实现了高效的对象管理和协作[^2]。 #### 综合应用案例展示 下面给出一段综合运用上述几种技术手段的例子,展示了如何在一个项目内部灵活调配资源和服务。 ```java // Service layer component with autowired repository dependency. @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository){ this.userRepository = userRepository; } // ... service methods ... } // Repository interface extending CrudRepository for database operations. @Repository interface UserRepository extends CrudRepository<User, Long> {} // Configuration class defining beans programmatically alongside annotated components. @Configuration @ComponentScan(basePackages = "com.example") public class ApplicationConfig { @Bean public DataSource dataSource(){ EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); return builder.setType(EmbeddedDatabaseType.HSQL).build(); } } ``` 这段代码片段说明了即使是在同一个应用程序内也可以混合采用不同风格的bean配置策略,从而达到最佳实践效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值