spring基础(三)
1:spring作用域范围scope:
Scope描述的是Spring容器如何新建Bean实例的。Spring的Scope有以下几种,通过@Scope注解来实现。
(1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。
(2)Prototype:每次调用新建一个Bean实例。
(3)Request:Web项目中,给每一个 http request 新建一个Bean实例。
(4)Session:Web项目中,给每一个 http session 新建一个Bean实例。
(5)GlobalSession:这个只在portal应用中有用,给每一个 global http session 新建一个Bean实例。
@Configuration public class ScopeTest { @Bean @Scope(value="singleton") public Config singeConfig() { return new Config(); } @Bean @Scope(value="prototype") public Config prototypeConfig() { return new Config(); } @Bean @Scope(value="request") public Config requestConfig() { return new Config(); } @Bean @Scope(value="session") public Config sessionConfig() { return new Config(); } }
2:FactoryBean实例化对象
参考文档:https://www.cnblogs.com/redcool/p/6413461.html
package com.test.zhang; import org.springframework.beans.factory.FactoryBean; import org.springframework.stereotype.Component; @Component public class MyFactoryBean implements FactoryBean<UserTest>{ @Override public UserTest getObject() throws Exception { return new UserTest(11); } @Override public Class<?> getObjectType() { return UserTest.class; } @Override public boolean isSingleton() { // TODO Auto-generated method stub return true; } }
3:spring4.3构造方法注入对象新特性
/** * spring4.3新特性 * 需要注意: * 1:构造函数只能有一个,如果有多个的话,就必须有一个无参的构造函数,此时,spring会调用无参的构造函数 * 2:构造函数的参数,必须都要在Spring容器中有 * @author hadoop * */ @Component public class Spring4_3 { private ApplicationContext applicationContext; private TestInitAndDestory testInitAndDestory; public Spring4_3(ApplicationContext applicationContext,TestInitAndDestory testInitAndDestory) { this.applicationContext = applicationContext; this.testInitAndDestory = testInitAndDestory; } public void show() { System.out.println(applicationContext ); this.testInitAndDestory.add(); } }
4:ApplicationContextAware接口拿到spring上下文
参考文档:https://blog.csdn.net/bailinbbc/article/details/76446594
package com.edu.spring1; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 实现逻辑参照:ApplicationContextAwareProcessor * @author hadoop * */ @Component public class Book implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public void show(){ System.out.println("book : " + applicationContext.getClass()); } }
5:BeanPostProcessor
参考文档:https://www.cnblogs.com/libra0920/p/6118157.html
package com.test.zhang; import java.lang.reflect.Proxy; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component; @Component public class MyBeanPostProcessor implements BeanPostProcessor{ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }
6:BeanDefinitionRegistryPostProcessor 动态注册bean
package com.edu.spring2; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.stereotype.Component; /** * BeanDefinitionRegistryPostProcessor可以拿到ConfigurableListableBeanFactory,BeanDefinitionRegistry两个对象 * BeanDefinitionRegistry对象可以动态的注入bean * @author hadoop * */ @Component public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { for(int i=1;i<=10;i++){ BeanDefinitionBuilder bdb = BeanDefinitionBuilder.rootBeanDefinition(Person.class); bdb.addPropertyValue("name", "admin" + i); registry.registerBeanDefinition("person" + i, bdb.getBeanDefinition()); } } }
posted on 2018-04-14 19:49 tarimengyan 阅读(116) 评论(0) 收藏 举报
浙公网安备 33010602011771号