用于改变作用范围:
作用和bean标签中使用scope属性实现功能是一样的
@scope
作用:指定bean作用范围
属性:value: singleton(单例) prototype(多例)
注意:默认为单例的
测试:
实体类:
@Component
public class User {
public User(){
System.out.println("对象被创建出来了");
}
}
spring核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 需要导入context"命名空间和约束-->
<!-- 告知spring容器在创建的时候要扫描的包-->
<context:component-scan base-package="com"></context:component-scan>
</beans>
测试类:
public static void main(String[] args) {
//通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
//获取Spring容器中的bean对象,通过id和类字节码来获取
User user = applicationContext.getBean("user", User.class);
User user1 = applicationContext.getBean("user", User.class);
//执行方法
System.out.println(user==user1);
}
结果:
使用注解@Scope设置多例
结果:
生命周期相关(了解)
作用和bean标签使用init-method和destroy-method作用一样
- @PreDestroy
- 指定销毁方法
- @PostConstruct
- 指定初始化方法
测试:
实体类添加方法inti和destroy方法,使用注解@PreDestroy、@PostConstruct
@Component
//@Scope("prototype")
public class User {
public User(){
System.out.println("对象被创建出来了");
}
//指定初始化方法
@PostConstruct
public void init(){
System.out.println("对象初始化。。。");
}
//指定销毁方法
@PreDestroy
public void destroy(){
System.out.println("对象被销毁。。。");
}
}
测试类:
public static void main(String[] args) {
//通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
ClassPathXmlApplicationContext Context=new ClassPathXmlApplicationContext("bean.xml");
//获取Spring容器中的bean对象,通过id和类字节码来获取
User user = Context.getBean("user", User.class);
//销毁容器方法
Context.close();
}
结果: