什么豆在春天和什么不是

时间:2016-10-19 08:45:41

标签: spring

假设我有这样的代码:

@Repository
public class Foo{
}

@Service
public class Boo{

@Autowired
private Foo foo;
}

所以现在我们在这里调用bean了吗? Bean是Foo类型引用的对象“foo”但是Boo类是注释为Service和Foo作为Repository ALSO bean吗?我一直在使用spring一段时间,但是这个基本问题让我感到不舒服......

3 个答案:

答案 0 :(得分:2)

在Spring的上下文中,bean是一个spring管理对象。这里spring managed意味着一个由Spring IoC容器创建,初始化,管理和销毁的对象。

每当我们使用@Component标记一个类时,Spring IOC容器将为您的类创建对象并对其进行管理,每当我们可以从ApplicationContext获取它或使用@Autowired/@Resource/@Inject访问它时注释

我们也可以使用@Controller, @Repository, @Service, @ControllerAdvice, @Configuration,@Aspect代替@Component来更具体地告诉我们我们的类是服务或存储库或方面等。

我们还可以使用@Bean注释从方法返回值

创建bean
@Configuration
public class SolrConfig {

    @Value("${spring.data.solr.host}") String solrUrl;

    @Bean
    public SolrServer solrServer() {
        return new HttpSolrServer(solrUrl);
    }

    @Bean(name = "solrTemplate")
    public SolrTemplate solrTemplate() {
        return new SolrTemplate(new HttpSolrServer(solrUrl), RULE_ENGINE_CORE);
    }
}

答案 1 :(得分:0)

所有应用程序组件(@ Component,@ Service,@ Repository,@ Controller等)都将自动注册为Spring Beans

http://docs.spring.io/autorepo/docs/spring-boot/current/reference/html/using-boot-spring-beans-and-dependency-injection.html

答案 2 :(得分:0)

可以将定义Bean视为替换关键字new。

可以找到更多信息here,这可能有助于理解Spring中的Bean。