Spring IoC配置方式的对比
XML and 注解 and 纯注解
基于XML配置
XML
指定配置信息
<!--导入Bean的头文件约束-->
Bean的创建
<!--1.默认构造函数创建-->
<bean id="..." class="..."></bean>
<!--2.类方法创建-->
<bean id="InstanceFactory" class="..."></bean>
<bean id="..." factory-bean="InstanceFactory" factory-method="..."></bean>
<!--3.类静态方法创建-->
<bean id="..." class="...(StaticFactory)" factory-method="..."></bean>
Bean的作用范围
<bean ... scope="singleton/prototype"></bean>
Bean的生命周期
<!--start.初始化方法-->
<bean ... init-method="..."></bean>
<!--end.销毁方法-->
<bean ... destroy-method="..."></bean>
依赖注入
<!--注入类型-->
<!--1.基本类型和String类型 2.Bean对象 3.集合类型-->
<!--注入方式-->
<!--1.构造函数注入-->
<bean ...>
<constructor-arg name="..." value="...(基本数据类型、String类型和EL表达式)"/ref="...(bean对象)"></constructor-arg>
</bean>
<!--2.set方法注入-->
<bean ...>
<property name="..." value="...(基本数据类型、String类型和EL表达式)"/ref="...(bean对象)"></property>
<!--集合类型-->
<!--Map结构key-value-->
<property name="...">
<map>
<entry key="...">...</entry>
</map>
</property>
<!--List结构value-->
<property name="...">
<array>
<value>...</value>
</array>
</property>
</bean>
<!--3.P空间注入-->
<beans ... xmlns:p="http://www.springframework.org/schema/p" ...>
<bean ... p:varA="...(基本和String类型)" p:varB-ref="...(bean对象)"/></bean>
</beans>
<!--使用Properties文件-->
<context:property-placeholder location="classpath:... .properties"/>
基于注解配置
XML
指定配置信息
<!--导入context头文件约束-->
不同对象的配置
<!--自己编写的类Bean创建-->
<context:component-scan base-package="..."></context:component-scan>
<!--导入的类Bean创建-->
<bean id="" class=""></bean>
注解
Bean的创建
//在类上进行注解
@Component(value="...")
@Controller("...") //展现层对象
@Service("...") //业务层对象
@Repository("...") //持久层对象
Bean的作用范围
//在类或方法上进行注解
@Scope("singleton/prototype")
Bean的生命周期
//在方法上进行注解
//start.初始化方法
@PostConstruct
//end.销毁方法
@PreDestroy
依赖注入
//注入类型
//1.基本类型和String类型 2.Bean对象
//注入方式(在变量上进行注解)
@Value("...(基本数据类型、String类型和EL表达式)")
@Autowired //Bean对象按类型自动注入
@Qulifier(value="...(Baen对象)") //按类型和名称注入
@Resource(name="...(Bean对象)") //按名称注入
//使用Properties文件(在类上进行注解)
@PropertySource("classpath:....properties")
基于纯注解配置
将注解中XML的工作全由注解配置类代替,其余和注解部分一致
注解
指定配置信息
//指定配置类(在类上进行注解) == .xml
@Configruation
//导入其他配置类(在类上进行注解)
@Import(value=ChildConfigruation.class)
不同对象的配置
//自己编写的类(在类上进行注解) == <context:component-scan>
@ComponentScan(value={"..."}/"...")
//导入的类(在方法上进行注解) == <bean id="" class="">
@Bean(name="...")
如何选择?
基本原则:怎么方便怎么来
一般情况而言
- 注解方式更适合配置自己编写的代码类
- XML方式更适合对于导入的jar包使用