java JSP开发之Spring中Bean的使用
java jsp开发之spring中bean的使用
在传统的java应用中,bean的生命周期很简单。使用java关键字new进行bean实例化,然后bean就可以被使用了,一旦该bean不再使用,java就自动进行垃圾回收。然而,在spring中,bean的生命周期就比较复杂了。下面是一个bean装载到spring应用上下文的过程:
如图所示:在你准备调用bean之前,bean工厂执行了若干启动步骤:
1.spring对bean进行实例化;
2.spring将值和bean的引用注入到bean对应的属性中;
3.如果bean实现了beannameaware接口,spring将bean的id传递给setbean-name()方法;
4.如果bean实现了beanfactoryaware接口,spring将调用setbeanfactory()方法,将beanfactory容器实例传入;
5.如果bean实现了applicationcontextaware接口,spring将调用setapplicationcontext()方法,将bean所在的应用上下文的引用传入进来;
6.如果bean实现了beanpostprocessor接口,spring将调用它们的post-processbeforeinitialization()方法;
7.如果bean实现了initializingbean接口,spring将调用它们的after-propertiesset()方法。类似地,如果bean使用initmethod声明了初始化方法,该方法也会被调用;
8.如果bean实现了beanpostprocessor接口,spring将调用它们的post-processafterinitialization()方法;
9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
10.如果bean实现了disposablebean接口,spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
一,创建可以被发现的bean
在厨师的眼中,一套好的刀是必不可少的,它能够将平淡的食物素材加工成精致的艺术品。
package cooking; public interface knife{ void cut(); }
现在,我们创建一个名为knife(刀)的接口,它拥有cut(切)的功能。接下来我们实现这个接口
package cooking @component public class beef implements knife{ private int weight = 2; private double price = 32.1; public void cut(){ system.out.println(“this is perfect beef”,+“weight:”+weight +“kg”+“,”+“it's price is”+price+"$"); } }
请注意,我们在beef类上使用了@component注解。这个简单的注解表明 该类是一个组件类,并告诉spring要为这个类创建bean。
在默认情况下,组件扫描是不启用的,我们需要显示配置一下spring,命令spring去寻找带有@component注解的类,并为其创建bean
package cooking @configuration @componentscan public class knifeconfig{ }
注意到,在knifeconfig类上加上了@componentscan注解,该注解能够在spring中开启组件扫描,如果没有其他配置的话,@componentscan默认会扫描与配置类相同的包,去查找带有@component的注解类,并在spring中自动为其创建一个bean。如果你更倾向于使用xml来启用组件扫描的话,那么可以使用spring context命名空间的<context:component-scan>元素。
<context:component-scan base-package="cooking"/> 该标签会开启组件扫描,去cooking包下寻找带有@component的注解类。
以上就是spring中bean的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!