Spring IoC容器中,bean的连线可以通过以下三种方式完成:
- 完全基于xml配置文件:bean的安装和依赖的注入都是通过xml文件进行配置,如:
<?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-3.0.xsd">
<bean id="john-classic" class="com.example.Man">
<property name="name" value="John Doe"/>
<property name="wife" ref="jane"/>
</bean>
<bean name="jane" class="com.example.Women">
<property name="name" value="John Doe"/>
</bean>
</beans>
2、xml文件与注解配合:与1的区别是,无需在bean安装时指定属性的赋值,只需要定义Class时,在属性上使用@Autowire注解,同时需要通过以下配置启用。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>
Class定义:
import org.springframework.beans.factory.annotation.Autowired;
public class Man {
@Autowired
private Women wife;
}
- 完全基于注解: @Configuration 和 @Bean 注解,不需要任何配置文件
@Configuration注解应用于类,表示这个类可以使用Spring IoC容器作为bean定义的来源。
@Bean注解应用于方法,告诉Spring这个方法返回的对象将作为bean注册在Spring容器(Spring应用上下文),方法名为bean id。
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
上面的代码将等同于下面的 XML 配置:
<beans>
<bean id="helloWorld" class="com.tutorialspoint.HelloWorld" />
</beans>
如需添加生命周期的回调方法,可同过注解的属性配置(默认即为单实例,可不指定作用域):
public class Foo {
public void init() {
// initialization logic
}
public void cleanup() {
// destruction logic
}
}
@Configuration
public class AppConfig {
@Bean(initMethod = "init", destroyMethod = "cleanup" )
@Scope("prototype")
public Foo foo() {
return new Foo();
}
}
网友评论