我还没有找到我能够理解的Spring bean的高级定义。我经常在Grails文档和书籍中看到它们,但我认为了解它们是什么将是有益的。那么春豆是什么呢?如何使用它们?它们与依赖注入有关吗?
当前回答
Spring的XML配置由bean组成,而bean基本上是类。它们只是我们在ApplicationContext中使用的pojo。定义bean可以看作是替换关键字new。所以无论你在应用程序中使用关键字new,比如:
MyRepository myRepository =new MyRepository ();
当你使用关键字new时你可以删除配置并将其放入XML文件中。 所以我们将像这样编码:
<bean name="myRepository "
class="com.demo.repository.MyRepository " />
现在我们可以简单地使用Setter注入/构造函数注入。我正在使用Setter注入。
public class MyServiceImpl implements MyService {
private MyRepository myRepository;
public void setMyRepository(MyRepository myRepository)
{
this.myRepository = myRepository ;
}
public List<Customer> findAll() {
return myRepository.findAll();
}
}
其他回答
Spring beans are classes. Instead of instantiating a class (using new), you get an instance as a bean cast to your class type from the application context, where the bean is what you configured in the application context configuration. This way, the whole application maintains singleton-scope instance throughout the application. All beans are initialized following their configuration order right after the application context is instantiated. Even if you don't get any beans in your application, all beans instances are already created the moment after you created the application context.
在Spring中,那些构成应用程序主干并由Spring IoC管理的对象 容器被称为bean。bean只是一个实例化、组装等的对象 由Spring IoC容器管理;
你只理解了一部分。您必须根据需要定制bean,并通知Spring容器在需要时管理它,方法是使用Martin Fowler创造的通常称为IoC(控制反转)的方法,也称为依赖注入(DI)。
您以某种方式连接bean,这样您就不必关心实例化或计算bean上的任何依赖项。这就是众所周知的好莱坞原则。
谷歌是最好的工具,除了在这个问题中你会被淹没的链接之外,还可以探索更多关于这个问题的内容。:)
For a Java class to be usable as a Java bean, its setter- and getter-method names need to be as per the JavaBean guidelines (also called design patterns) for properties. If such a Java class is instantiable & manageable by the Spring IoC container, it is a Spring bean. To achieve this, the programmer wires the class as a bean definition of a suitable scope by using XML config files or annotations or a mix of both. The programmer can create new Spring beans out of existing Spring beans by wiring further by passing the latter to constructor-arguments of the former either as string-names as <idref> elements or by dependency injection (it can be recursive).
这个答案可以与我的这个SO答案一起阅读,以获得更多的背景信息。
就Spring引导应用程序而言,bean只是一个Java对象,它是在应用程序启动时由Spring框架创建的。
对象的用途可以是任何东西——配置、服务、数据库连接工厂等等——Spring并不关心这些。
大多数bean依赖于其他bean才能工作,例如实体管理器可能需要一个数据库连接。Spring框架能够找出如何将bean自动连接在一起。从应用程序开发人员的角度来看,您只需声明所需的bean,它们就会“神奇地”出现在您的应用程序中,随时可以使用。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap