Spring配置Bean的几种方式


​ 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


<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)