IOC容器配置文件
配置文件是IOC容器的Bean定义来源.
xml形式
1
2
3
4
5
6
| <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean定义-->
</beans>
|
xml形式下, 对注解的支持:
1
| <context:annotation-config/>
|
java形式
@Configuration 将一个类标识为JavaConfig形式的Spring Ioc容器的配置类.
1
2
3
4
| @Configuration
public class SpringConfig{
//bean定义
}
|
然后, 使用配置文件初始化spring IOC 容器:
1
2
3
4
5
6
7
8
9
10
11
| public class MyApp {
public static void main(String[] args) {
// xml文件形式
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
// java代码形式
ApplicationContext ctx =
new AnnotationConfigApplicationContext(SpringConfig.class);
MyBean myBean = (MyBean) context.getBean("myBean");
}
}
|
Bean定义
xml形式
1
2
3
| <bean id="myBean" class="com.company.myapp.MyBean">
...
</bean>
|
java形式
@Bean 常与 @Configuration 搭档使用, 其将一个方法标识为Ioc容器中Bean的定义来源, 方法返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id.
1
2
3
4
5
6
7
| @Configuration
public class SpringConfig{
@Bean
public MyBean myBean(){
return new MyBean();
}
}
|
依赖注入
表达bean与bean之间的依赖关系
xml形式
1
2
3
4
| <bean id="myBean" class="com.company.myapp.MyBean">
<propery name ="dependencyService" ref="myBean2" />
</bean>
<bean id="myBean2" class="com.company.myapp.MyBean2"></bean>
|
java形式
1
2
3
4
5
6
7
8
9
10
11
12
| @Configuration
public class SpringConfig{
@Bean
public MyBean myBean(){
return new MyBean(myBean2());
}
@Bean
public MyBean2 myBean2(){
return new MyBean2();
}
}
|
ComponentScan
自动扫描并加载指定路径下符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean注册到IoC容器中。
可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描.
xml形式
1
| <context:component-scan base-package="com.company.myapp`"/>
|
java形式
1
| @ComponentScan(basePackages = "com.company.myapp")
|
bean属性值
xml形式
1
2
3
| <bean class="Person">
<property name ="name" value="i am name"></property>
</bean>
|
java形式
@Value就相当于传统 xml 配置文件中的 value 字段。
1
2
3
4
5
| @Component
public class Person {
@Value("i am name")
private String name;
}
|
value 的取值可以是:
- 字面量
- 通过 ${key}方式从环境变量中获取值
- 通过 ${key}方式全局配置文件中获取值
- #{SpEL}
References