我还没有找到我能够理解的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中,那些构成应用程序主干并由Spring IoC管理的对象 容器被称为bean。bean只是一个实例化、组装等的对象 由Spring IoC容器管理;
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是一个轻量级且灵活的框架。
类比:
Java bean是将许多对象封装到单个对象(bean)中的类。“Bean”这个名称包含了这个标准,它旨在为Java创建可重用的软件组件。
Spring Bean:是一个对象,在Spring容器中创建、管理和销毁。我们可以通过元数据(xml或注释)将对象注入到Spring容器中,这称为控制反转。
类比: 让我们假设农民有一块种种子(或豆子)的农田。 在这里,农民是春天的框架,农田是春天的容器,豆子是春天的豆子,耕种是春天的加工者。
和豆类的生命周期一样,春豆也有自己的生命周期。
img源
下面是Spring中bean生命周期的序列:
Instantiate: First the spring container finds the bean’s definition from the XML file and instantiates the bean. Populate properties: Using the dependency injection, spring populates all of the properties as specified in the bean definition. Set Bean Name: If the bean implements BeanNameAware interface, spring passes the bean’s id to setBeanName() method. Set Bean factory: If Bean implements BeanFactoryAware interface, spring passes the beanfactory to setBeanFactory() method. Pre-Initialization: Also called post process of bean. If there are any bean BeanPostProcessors associated with the bean, Spring calls postProcesserBeforeInitialization() method. Initialize beans: If the bean implements IntializingBean,its afterPropertySet() method is called. If the bean has init method declaration, the specified initialization method is called. Post-Initialization: – If there are any BeanPostProcessors associated with the bean, their postProcessAfterInitialization() methods will be called. Ready to use: Now the bean is ready to use by the application Destroy: If the bean implements DisposableBean, it will call the destroy() method
你只理解了一部分。您必须根据需要定制bean,并通知Spring容器在需要时管理它,方法是使用Martin Fowler创造的通常称为IoC(控制反转)的方法,也称为依赖注入(DI)。
您以某种方式连接bean,这样您就不必关心实例化或计算bean上的任何依赖项。这就是众所周知的好莱坞原则。
谷歌是最好的工具,除了在这个问题中你会被淹没的链接之外,还可以探索更多关于这个问题的内容。:)
春天有IoC容器,里面装着一袋豆子;创建、维护和删除是Spring Container的职责。 我们可以通过布线和自动布线将bean放到Spring中。 “连线”意味着我们手动将其配置到XML文件中,“自动连线”意味着我们将注释放入Java文件中,然后Spring自动扫描Java配置文件所在的根上下文,将其制作并放入Spring的包中。
这里是详细的URI,您可以从中获得有关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