Spring基于XML的自动装配

客官°小女子只卖身不卖艺 2024-04-05 07:10 128阅读 0赞

Spring基于XML的自动装配

1.自动装配的概念

根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值

2.自动装配策略

可以通过bean标签中的autowire属性设置自动装配的策略:
1.no,default:表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值,此时属性使用默认值
2.byType:根据要赋值的属性类型,在IOC容器中匹配某个bean为属性赋值
注意:
a>若通过类型没有找到任何一个类型匹配的bean,此时不匹配,属性使用默认值
b>若通过类型找到了多个类型匹配的bean,此时会抛出异常:NoUniqueBeanDefinitionEx
总结:当使用byType实现自动装配时,IOC容器有且只有一个类型匹配的bean能够为属性赋值
3.byName:将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean,为属性赋值
总结:当类型匹配的bean有多个时,此时可以使用byName实现自动装配

3.自动装配的具体实现

这里在UserDao中创建saveUser方法,通过控制层、业务层、持久层三层架构实现方法的实现调用为例

  1. package com.qcw.spring.controller;
  2. import com.qcw.spring.service.UserService;
  3. public class UserController {
  4. private UserService userService;
  5. public UserService getUserService() {
  6. return userService;
  7. }
  8. public void setUserService(UserService userService) {
  9. this.userService = userService;
  10. }
  11. public void saveUser(){
  12. userService.saveUser();
  13. }
  14. }
  15. package com.qcw.spring.service;
  16. public interface UserService {
  17. //保存用户信息
  18. void saveUser();
  19. }
  20. package com.qcw.spring.service.impl;
  21. import com.qcw.spring.dao.UserDao;
  22. import com.qcw.spring.service.UserService;
  23. public class UserServiceImpl implements UserService {
  24. private UserDao userDao;
  25. public UserDao getUserDao() {
  26. return userDao;
  27. }
  28. public void setUserDao(UserDao userDao) {
  29. this.userDao = userDao;
  30. }
  31. public void saveUser() {
  32. userDao.saveUser();
  33. }
  34. }
  35. package com.qcw.spring.dao;
  36. public interface UserDao {
  37. //保存用户信息
  38. void saveUser();
  39. }
  40. package com.qcw.spring.dao.impl;
  41. import com.qcw.spring.dao.UserDao;
  42. public class UserDaoImpl implements UserDao {
  43. public void saveUser() {
  44. System.out.println("保存成功");
  45. }
  46. }
  47. <?xml version="1.0" encoding="UTF-8"?>
  48. <beans xmlns="http://www.springframework.org/schema/beans"
  49. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  50. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  51. <bean id="userController" class="com.qcw.spring.controller.UserController" autowire="byType">
  52. <!-- <property name="userService" ref="userService"></property>-->
  53. </bean>
  54. <bean id="userService" class="com.qcw.spring.service.impl.UserServiceImpl" autowire="byType">
  55. <!-- <property name="userDao" ref="userDao"></property>-->
  56. </bean>
  57. <bean id="userDao" class="com.qcw.spring.dao.impl.UserDaoImpl"></bean>
  58. </beans>
  59. ackage com.qcw.spring.test;
  60. import com.qcw.spring.controller.UserController;
  61. import org.junit.Test;
  62. import org.springframework.context.support.ClassPathXmlApplicationContext;
  63. public class AutowireByXMLTest {
  64. /**
  65. * 自动装配:
  66. * 根据指定的策略,在IOC容器中匹配某个bean,自动为bean中的类类型的属性或接口类型的属性赋值
  67. *
  68. * 可以通过bean标签中的autowire属性设置自动装配的策略:
  69. * 1.no,default:表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值,此时属性使用默认值
  70. * 2.byType:根据要赋值的属性类型,在IOC容器中匹配某个bean为属性赋值
  71. * 注意:
  72. * a>若通过类型没有找到任何一个类型匹配的bean,此时不匹配,属性使用默认值
  73. * b>若通过类型找到了多个类型匹配的bean,此时会抛出异常:NoUniqueBeanDefinitionException
  74. * 总结:当使用byType实现自动装配时,IOC容器有且只有一个类型匹配的bean能够为属性赋值
  75. * 3.byName:将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean,为属性赋值
  76. * 总结:当类型匹配的bean有多个时,此时可以使用byName实现自动装配
  77. */
  78. @Test
  79. public void testAutowire(){
  80. ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring-autowire-xml.xml");
  81. UserController userController = ioc.getBean(UserController.class);
  82. userController.saveUser();
  83. }
  84. }

发表评论

表情:
评论列表 (有 0 条评论,128人围观)

还没有评论,来说两句吧...

相关阅读