Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 7 additions & 0 deletions
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
}
Lines changed: 98 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /