Spring IoC配置方式的对比

  • XML and 注解 and 纯注解
  • 基于XML配置
  • XML
  • 指定配置信息
  • Bean的创建
  • Bean的作用范围
  • Bean的生命周期
  • 依赖注入
  • 基于注解配置
  • XML
  • 指定配置信息
  • 不同对象的配置
  • 注解
  • Bean的创建
  • Bean的作用范围
  • Bean的生命周期
  • 依赖注入
  • 基于纯注解配置
  • 注解
  • 指定配置信息
  • 不同对象的配置
  • **如何选择?**


XML and 注解 and 纯注解

sofa和spring的区别 spring sowing对比_XML

基于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包使用