先看下面代码:
package com.xhx.spring.config;
import com.xhx.spring.domain.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import java.beans.PersistenceDelegate;
@Configuration
public class ScopeConfig {
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) //单例 多例
@Bean
@Lazy //是否在用到的时候再初始化
public Person getPerson(){
System.out.println("初始化。。");
return new Person("xu",25);
}
// @Autowired
// private Person person1;
@Autowired
@Lazy //是否在用到的时候再注入
private Person person2;
}
@Bean: Indicates that a method produces a bean to be managed by the Spring container. 把一个方法产生的bean交给spring管理。可以用name属性指定注入的名称
@Scope:表明是单例还是多例注入,有两个值:
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry {
/**
* Scope identifier for the standard singleton scope: "singleton".
* Custom scopes can be added via {@code registerScope}.
* @see #registerScope
*/
String SCOPE_SINGLETON = "singleton";
/**
* Scope identifier for the standard prototype scope: "prototype".
* Custom scopes can be added via {@code registerScope}.
* @see #registerScope
*/
String SCOPE_PROTOTYPE = "prototype";
....
}
@Lazy:表示用到的时候初始化,用到的时候再进行注入
测试类:
package com.xhx.spring;
import com.xhx.spring.config.ScopeConfig;
import com.xhx.spring.domain.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Spring5ScopeLazyApplicationTests {
@Test
public void testScope() {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(ScopeConfig.class);
Person bean = annotationConfigApplicationContext.getBean(Person.class);
System.out.println(bean);
Person bean2 = annotationConfigApplicationContext.getBean(Person.class);
System.out.println(bean2);
}
}
**实时内容请关注微信公众号,公众号与博客同时更新:程序员星星**