org.springframework.context.ApplicationContextAware
org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor
org.springframework.context.ApplicationListener
package org.springboot.sample.config;
public interface Shanhy {
void display();
}
package org.springboot.sample.config;
public class ShanhyA implements Shanhy {
@Override
public void display() {
System.out.println("AAAAAAAAAAAA");
}
}
package org.springboot.sample.config;
public class ShanhyB implements Shanhy {
@Override
public void display() {
System.out.println("BBBBBBBBBBBB");
}
}
package org.springboot.sample.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.AnnotationScopeMetadataResolver;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ScopeMetadata;
import org.springframework.context.annotation.ScopeMetadataResolver;
/**
* 实现自己实例化bean并注册为Spring管理
*
* @author 单红宇(365384722)
* @create 2016年1月21日
*/
@Configuration
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
private static final Logger logger = LoggerFactory.getLogger(MyBeanDefinitionRegistryPostProcessor.class);
private ScopeMetadataResolver scopeMetadataResolver = new AnnotationScopeMetadataResolver();
private BeanNameGenerator beanNameGenerator = new AnnotationBeanNameGenerator();
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
logger.info("Invoke Metho postProcessBeanFactory");
// 这里可以设置属性,例如
BeanDefinition bd = beanFactory.getBeanDefinition("dataSourceA");
MutablePropertyValues mpv = bd.getPropertyValues();
mpv.addPropertyValue("driverClassName", "com.mysql.jdbc.Driver");
mpv.addPropertyValue("url", "jdbc:mysql://localhost:3306/test");
mpv.addPropertyValue("username", "root");
mpv.addPropertyValue("password", "123456");
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
logger.info("Invoke Metho postProcessBeanDefinitionRegistry");
registerBean(registry, "shanhyA", ShanhyA.class);
registerBean(registry, "shanhyB", ShanhyB.class);
registerBean(registry, "dataSourceA", org.apache.tomcat.jdbc.pool.DataSource.class);
}
private void registerBean(BeanDefinitionRegistry registry, String name, Class<?> beanClass){
AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(beanClass);
ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(abd);
abd.setScope(scopeMetadata.getScopeName());
// 可以自动生成name
String beanName = (name != null ? name : this.beanNameGenerator.generateBeanName(abd, registry));
AnnotationConfigUtils.processCommonDefinitionAnnotations(abd);
BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry);
}
}
/**
* 测试参数注入
*
* @author 单红宇(365384722)
* @create 2016年1月13日
*/
@Configuration
public class MyConfiguration {
@Bean
public FilterRegistrationBean filterRegistrationBean(@Qualifier("shanhyB") Shanhy shanhy) {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
shanhy.display();
// 省略代码
return filterRegistration;
}
}
@RestController
@RequestMapping("/hello")
public class HelloController {
@Resource(name="shanhyA")
private Shanhy shanhyA;
@Autowired
@Qualifier("shanhyB")
private Shanhy shanhyB;
// 省略代码
}
@Configuration
@Import(Registrar.class)
public class TestConfig {
}
class Registrar implements ImportBeanDefinitionRegistrar {
private static final String BEAN_NAME = "myTestBean";
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
if (!registry.containsBeanDefinition(BEAN_NAME)) {
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(ExamplePostProcessor.class);
beanDefinition.setSynthetic(true);
registry.registerBeanDefinition(BEAN_NAME, beanDefinition);
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有