Skip to content

Commit 8564c37

Browse files
committed
add serveral ways to configure beans in java readme
1 parent 845bcad commit 8564c37

File tree

3 files changed

+105
-0
lines changed

3 files changed

+105
-0
lines changed

‎springboot-source-code-analysis/(11)通过Java配置Bean的几种方式.md

Whitespace-only changes.

‎springboot-source-code-analysis/src/main/java/com/example/springboot/source/code/analysis/ioc/ann/MyFactoryBean.java

+7
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@
1717
@Component
1818
public class MyFactoryBean implements FactoryBean<Animal> {
1919

20+
/**
21+
* 返回要注入的类
22+
*/
2023
@Override
2124
public Animal getObject() throws Exception {
2225
return new Cat();
2326
}
2427

28+
/**
29+
* 获取要注入类的类型
30+
*/
2531
@Override
2632
public Class<?> getObjectType() {
2733
return Animal.class;
@@ -31,4 +37,5 @@ public Class<?> getObjectType() {
3137
public boolean isSingleton() {
3238
return FactoryBean.super.isSingleton();
3339
}
40+
3441
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
### 通过Java配置Bean的几种方式
2+
3+
#### 1.通过@Configuration注解注入Bean的方式
4+
5+
```java
6+
@Configuration
7+
public class MyBeanConfiguration {
8+
9+
/**
10+
* 通过 @Configuration注解 注入一个Bean
11+
*/
12+
@Bean("dog")
13+
public Animal getDog() {
14+
return new Dog();
15+
}
16+
17+
}
18+
```
19+
20+
21+
22+
#### 2.通过实现FactoryBean<?>接口的方式注入Bean
23+
24+
```java
25+
@Component
26+
public class MyFactoryBean implements FactoryBean<Animal> {
27+
28+
/**
29+
* 返回要注入的类
30+
*/
31+
@Override
32+
public Animal getObject() throws Exception {
33+
return new Cat();
34+
}
35+
36+
/**
37+
* 获取要注入类的类型
38+
*/
39+
@Override
40+
public Class<?> getObjectType() {
41+
return Animal.class;
42+
}
43+
44+
@Override
45+
public boolean isSingleton() {
46+
return FactoryBean.super.isSingleton();
47+
}
48+
49+
}
50+
```
51+
52+
53+
54+
#### 3.通过实现BeanDefinitionRegistryPostProcessor接口的方式注入Bean
55+
56+
```java
57+
@Component
58+
public class MyBeanDefinitionRegistry implements BeanDefinitionRegistryPostProcessor {
59+
60+
/**
61+
* 通过BeanDefinitionRegistryPostProcessor
62+
*/
63+
@Override
64+
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
65+
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
66+
rootBeanDefinition.setBeanClass(Monkey.class);
67+
beanDefinitionRegistry.registerBeanDefinition("monkey", rootBeanDefinition);
68+
}
69+
70+
@Override
71+
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
72+
73+
}
74+
}
75+
```
76+
77+
78+
79+
#### 4.通过实现ImportBeanDefinitionRegistrar接口的方式注入Bean
80+
81+
```java
82+
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
83+
84+
/**
85+
* 通过ImportBeanDefinitionRegistrar注入Bean
86+
*/
87+
@Override
88+
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
89+
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();
90+
rootBeanDefinition.setBeanClass(Bird.class);
91+
registry.registerBeanDefinition("bird", rootBeanDefinition);
92+
}
93+
}
94+
95+
```
96+
97+
> 使用时:用 @Import(MyImportBeanDefinitionRegistrar.class) 进行注入
98+

0 commit comments

Comments
 (0)