Repository navigation
Bean
B1o0dy_Trey edited this page Feb 7, 2020
·
16 revisions
@Named是JSR-330中的注解,该注解标记的类将会作为bean,添加到容器中。此外,每一个bean都有一个id,id具有唯一性,需要在上下文中不重复。
默认bean的id会由容器自动生成,如果需要定制,可以通过设置@Named的value来指定,但需要保证唯一性。下面这段代码是一个使用@Named标注一个bean的例子。
// bean的名称将由容器生成
@Named
public class ExampleBean1(){}
// bean名称为example
@Named("example")
public class ExampleBean2(){}bean的Scope属性主要由@Singleton注解配置。Scope是bean的基本属性,容器通过判断Scope属性判断bean是否为单例。单例bean在获取时,容器都会给您提供同一个实例。多例bean,在每次获取时,容器都会生产一个新的实例。
bean的默认scope为多例。使用@Singleton注解标注在您的类和工厂方法上,可以将您的bean设置为单例。
需要注意的是,@Singleton注解需要和@Named注解一同使用,否则您的类或工厂方法将 不会被检测。
下面是一个例子
//这个类生成的bean是单例的
@Singleton
@Named
public class ExampleBean(){}一个bean在初始化时会做许多工作,您可以使您的类实现InitializingBean接口,来控制bean的初始化过程。通过重写InitializingBean接口中的afterPropertiesSet()方法,在注入依赖过程完成后,我们会自动帮您处理剩下的工作。
下面是一个例子
@Singleton
@Named
public class ExampleInitializingBean implements InitializingBean(){
@Override
public void afterPropertiesSet(){
System.out.println("这个方法将在依赖注入完成后执行");
}
}在调用AnnotationApplicationContext的close方法时,会先执行bean中自定义的预销毁方法。您可以通过重写DisposableBean接口中的destroy()方法,来将控制销毁单例bean前要执行的工作。
下面是一个例子
@Singleton
@Named
public class ExampleDisposableBean implements DisposableBean(){
@Override
public void destroy(){
System.out.println("这个方法将在销毁bean之前执行");
}
}