XML和注解

实际开发中使用XML还是注解?

XML:

bean的管理

注解:

注入属性的时候比较方便


两种方式的结合:一般使用XML注册bean,使用注解来进行属性注入。在applicationContext.xml中配置<context:annotation-config></context:annotation-config>

举个简单的例子:

新建3个bean:

[java] view plain copy
  1. package com.js.demo4;  
  2.   
  3. public class OrderDao {  
  4.   
  5. }  


[java] view plain copy
  1. package com.js.demo4;  
  2.   
  3. public class CustomerDao {  
  4.   
  5. }  


[java] view plain copy
  1. package com.js.demo4;  
  2.   
  3. public class CustomerService {  
  4.     private CustomerDao customerDao;  
  5.     private OrderDao orderDao;  
  6.     @Override  
  7.     public String toString() {  
  8.         return "CustomerService [customerDao=" + customerDao + ", orderDao="  
  9.                 + orderDao + "]";  
  10.     }  
  11.     public void setCustomerDao(CustomerDao customerDao) {  
  12.         this.customerDao = customerDao;  
  13.     }  
  14.     public void setOrderDao(OrderDao orderDao) {  
  15.         this.orderDao = orderDao;  
  16.     }  
  17.       
  18. }  


配置applicationContext.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xsi:schemaLocation="  
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  8. <!-- 纯用注解配置bean的情况下context:annotation-config可以省略,当混合使用xml和注解配置bean的时候就不能省略了-->  
  9. <context:annotation-config></context:annotation-config>  
  10. <!-- 配置扫描注解的包 -->  
  11. <!-- <context:component-scan base-package="com.js"></context:component-scan> -->  
  12. <bean id="customerDao" class="com.js.demo4.CustomerDao"></bean>  
  13. <bean id="customerService" class="com.js.demo4.CustomerService">  
  14.     <property name="customerDao" ref="customerDao"></property>  
  15.     <property name="orderDao" ref="orderDao"></property>  
  16. </bean>  
  17. <bean id="orderDao" class="com.js.demo4.OrderDao"></bean>  
  18. </beans>  

编写测试类:

[java] view plain copy
  1. package com.js.demo4;  
  2.   
  3. import org.junit.Test;  
  4. import org.springframework.context.ApplicationContext;  
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  6.   
  7. public class Test4 {  
  8.     @Test  
  9.     public void demo(){  
  10.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext2.xml");  
  11.         CustomerService customerService = (CustomerService)applicationContext.getBean("customerService");  
  12.         System.out.println(customerService);  
  13.     }  
  14. }  

运行结果,注入成功:


我们能不能修改配置方式,只在xml中注册bean,而将bean的属性注入使用注解来完成呢?

修改CustomerService:使用注解传入的属性就不在需要setter方法,也不再需要Component-scan,因为我们的bean全部在xml中配置,此处修改两个属性之一的orderDao:

[java] view plain copy
  1. package com.js.demo4;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.beans.factory.annotation.Qualifier;  
  5.   
  6. public class CustomerService {  
  7.     private CustomerDao customerDao;  
  8.     @Autowired  
  9.     @Qualifier("orderDao")  
  10.     private OrderDao orderDao;  
  11.     @Override  
  12.     public String toString() {  
  13.         return "CustomerService [customerDao=" + customerDao + ", orderDao="  
  14.                 + orderDao + "]";  
  15.     }  
  16.     public void setCustomerDao(CustomerDao customerDao) {  
  17.         this.customerDao = customerDao;  
  18.     }  
  19.       
  20. }  

修改xml配置文件:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:context="http://www.springframework.org/schema/context"  
  5.        xsi:schemaLocation="  
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  8. <!-- 纯用注解配置bean的情况下context:annotation-config可以省略,当混合使用xml和注解配置bean的时候就不能省略了-->  
  9. <!-- 作用是使@Resource、@PostConstruct、@PreDestroy、@AutoWired生效-->  
  10. <context:annotation-config></context:annotation-config>  
  11.   
  12. <bean id="customerDao" class="com.js.demo4.CustomerDao"></bean>  
  13. <bean id="customerService" class="com.js.demo4.CustomerService">  
  14.     <property name="customerDao" ref="customerDao"></property>  
  15. </bean>  
  16. <bean id="orderDao" class="com.js.demo4.OrderDao"></bean>  
  17. </beans>  

运行测试,成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值