假设我有这样的代码:
@Repository
public class Foo{
}
@Service
public class Boo{
@Autowired
private Foo foo;
}
所以现在我们在这里调用bean了吗? Bean是Foo类型引用的对象“foo”但是Boo类是注释为Service和Foo作为Repository ALSO bean吗?我一直在使用spring一段时间,但是这个基本问题让我感到不舒服......
答案 0 :(得分:2)
在Spring的上下文中,bean是一个spring管理对象。这里spring managed意味着一个由Spring IoC容器创建,初始化,管理和销毁的对象。
每当我们使用@Component
标记一个类时,Spring IOC容器将为您的类创建对象并对其进行管理,每当我们可以从ApplicationContext
获取它或使用@Autowired/@Resource/@Inject
访问它时注释
我们也可以使用@Controller, @Repository, @Service, @ControllerAdvice, @Configuration,@Aspect
代替@Component
来更具体地告诉我们我们的类是服务或存储库或方面等。
我们还可以使用@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
答案 2 :(得分:0)
可以将定义Bean视为替换关键字new。
可以找到更多信息here,这可能有助于理解Spring中的Bean。