目录
本章将说一下使用@Scope设置组件作用域
一、@Scope说明
/**
* 1.prototype: 多实例:ioc容器启动并不会去调用方法创建对象放在容器吕。
* 每次获取的时候才会调用方法创建对象
* 2.singleton: 单实例(默认值),ioc容器启动会调用方法创建对象放到ioc容器中。
* 以后每次获取就是直接从容器(map.get())中拿。
* 3.request: 同一次请求创建一个实例
* 4.session:同一个session创建一个实例
*
* */
@Scope("prototype")
PS:最后2个不常用
二、例子2
废话小少说了,直接上例子,我这里使用的是《hualinux spring 4.3:idea 2020创建简单的spring注解式》 建立的项目为基础的
我直接就是使用了其中的com.hualinux.spring.HelloMain.java修改一下
package com.hualinux.spring;
import conf.HelloConf;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class HelloMain {
public static void main(String[] args) {
//1. 创建 Spring 的IOC容器对象
//这次使用的不是ClassPathXmlApplicationContext类了,而是注解类
AnnotationConfigApplicationContext ctx= new AnnotationConfigApplicationContext(HelloConf.class);
//2. 从 IOC 容器中获取 Bean 实例,填写Bean的ID就是java配置文件的方法名
//Hello hello= (Hello) ctx.getBean("hello");
Object hello = ctx.getBean("hello");
Object hello2 = ctx.getBean("hello");
System.out.println(hello==hello2);
}
}
运行结果为:true
我在配置文件conf.HelloConf.java添加上@Scope
package conf;
import com.hualinux.spring.Hello;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
//告诉spring 这是一个配置文件,这个注解是一定要有的
@Configuration
public class HelloConf {
/**
* prototype: 多实例:ioc容器启动并不会去调用方法创建对象放在容器吕。
* 每次获取的时候才会调用方法创建对象
* singleton: 单实例(默认值),ioc容器启动会调用方法创建对象放到ioc容器中。
* 以后每次获取就是直接从容器(map.get())中拿。
* request: 同一次请求创建一个实例
* session:同一个session创建一个实例
*
* */
@Scope("prototype")
//@Bean相当于<bean ...></bean>标签
@Bean
//返回类型相当于XML配置的class类属性,方法名相当于id
public Hello hello(){
//这里使用new交给spring Ioc容器管理
Hello hello =new Hello();
hello.setName("阿华");
return hello;
}
}
再次运行结果为:false