@Scope @Lazy @Bean註解註解
阿新 • • 發佈:2018-12-12
先看下面程式碼:
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管理。
@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); } }