Spring(四):HelloSpring

打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

上一篇学习了控制反转(IoC)的本质和具体实现方法,这次我们就学习写一个小的项目来体验这个过程。
一、项目构建
1.Maven依赖(导包)
  1. <dependencies>
  2.         
  3.         <dependency>
  4. <?xml version="1.0" encoding="UTF-8"?>
  5. <beans xmlns="http://www.springframework.org/schema/beans"
  6.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  8.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  9.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  10.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  11.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  12. </beans><groupId>org.springframework</groupId>
  13. <?xml version="1.0" encoding="UTF-8"?>
  14. <beans xmlns="http://www.springframework.org/schema/beans"
  15.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  16.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  17.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  18.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  19.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  20.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  21. </beans><artifactId>spring-webmvc</artifactId>
  22. <?xml version="1.0" encoding="UTF-8"?>
  23. <beans xmlns="http://www.springframework.org/schema/beans"
  24.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  25.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  26.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  27.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  28.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  29.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  30. </beans><version>5.3.23</version>
  31.         </dependency>
  32.         
  33.         <dependency>
  34. <?xml version="1.0" encoding="UTF-8"?>
  35. <beans xmlns="http://www.springframework.org/schema/beans"
  36.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  37.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  38.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  39.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  40.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  41.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  42. </beans><groupId>junit</groupId>
  43. <?xml version="1.0" encoding="UTF-8"?>
  44. <beans xmlns="http://www.springframework.org/schema/beans"
  45.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  46.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  47.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  48.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  49.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  50.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  51. </beans><artifactId>junit</artifactId>
  52. <?xml version="1.0" encoding="UTF-8"?>
  53. <beans xmlns="http://www.springframework.org/schema/beans"
  54.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  55.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  56.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  57.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  58.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  59.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  60. </beans><version>4.13.2</version>
  61. <?xml version="1.0" encoding="UTF-8"?>
  62. <beans xmlns="http://www.springframework.org/schema/beans"
  63.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  64.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  65.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  66.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  67.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  68.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  69. </beans><scope>test</scope>
  70.         </dependency>
  71.     </dependencies>
复制代码
只导入第一个spring-webmvc即可,junit只是为了方便测试。
2.写一个pojo:Hello
  1. package com.jms.pojo;
  2. public class Hello {
  3.     private  String str;
  4.     public String getStr() {
  5.         return str;
  6.     }
  7.     public void setStr(String str) {
  8.         this.str = str;
  9.     }
  10.     @Override
  11.     public String toString() {
  12.         return "Hello{" +
  13. <?xml version="1.0" encoding="UTF-8"?>
  14. <beans xmlns="http://www.springframework.org/schema/beans"
  15.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  16.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  17.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  18.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  19.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  20.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  21. </beans>    "str='" + str + '\'' +
  22. <?xml version="1.0" encoding="UTF-8"?>
  23. <beans xmlns="http://www.springframework.org/schema/beans"
  24.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  25.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  26.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  27.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  28.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  29.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  30. </beans>    '}';
  31.     }
  32. }
复制代码
3.基于XML配置元数据
首先看一下官方给出的模板和解释
  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.     xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  6.     <bean id="..." class="...">  
  7.         
  8.     </bean>
  9.     <bean id="..." class="...">
  10.         
  11.     </bean>
  12.    
  13. </beans>
复制代码
The id attribute is a string that identifies the individual bean definition.
The class attribute defines the type of the bean and uses the fully qualified classname.
id是标识单个Bean定义的字符串,class是定义Bean的类型并使用全限定类名。
下面看我们需要配置的XML:
(对于XML文件的名字无特殊要求,这里我们命名为beans.xml)
  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.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  6.    
  7.     <bean id="hello" class="com.jms.pojo.Hello">
  8.         <property name="str" value="Hello Spring"/>
  9.     </bean>
  10. </beans>
复制代码
二、测试
在测试之前我们需要知道怎么使用,官方给出了具体的使用方法:
实例化容器

提供给构造函数的一个或多个位置路径是资源字符串,允许容器从各种外部资源(如本地文件系统、Java 等)加载配置元数据。ApplicationContext CLASSPATH
  1. ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
复制代码
使用容器

这是高级工厂的接口,能够维护不同 Bean 及其依赖项的注册表。通过使用 该方法 ,您可以检索 Bean 的实例。ApplicationContextT getBean(String name, Class requiredType)
允许您读取 Bean 定义并访问它们,如以下示例所示:ApplicationContext
  1. // create and configure beans
  2. ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
  3. // retrieve configured instance
  4. PetStoreService service = context.getBean("petStore", PetStoreService.class);
  5. // use configured instance
  6. List<String> userList = service.getUsernameList();
复制代码
通过上述官方给出的使用例子,我们不难知道我们首先要通过传入XML的文件名实例化容器,并且通过getBean来获取我们的对象。
实例化容器的方法中,可以传入一个XML的文件名,也可以传入多个;getBean中的字符串传入的是XML文件中配置的bean的id,传入的class就是对象对应的类。
知道了具体的使用,下面我们就来实现:
  1. @Test
  2.     public void HelloSpring() {
  3.         //实例化容器
  4.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
  5.         //通过容器获取对象
  6.         Hello hello = applicationContext.getBean("hello", Hello.class);
  7.         System.out.println(hello);
  8.     }
复制代码
测试结果:

 没有问题。
 
既然HelloSpring没有问题,我们就完善一下一开始用于学习IoC基本原理的一个项目。
先看一下项目框架:

 
 由于依赖已经导入,在此我么就直接去配置XML文件,这里我们配置两个XML文件:
dao.xml:
  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.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  6.     <bean id="usrDaoImpl" class="com.jms.dao.UserDaoImpl"></bean>
  7.     <bean id="userDaoMysqlImpl" class="com.jms.dao.UserDaoMysqlImpl"></bean>
  8.     <bean id="userDaoOracleImpl" class="com.jms.dao.UserDaoOracleImpl"></bean>
  9. </beans>
复制代码
service.xml:
  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.        xsi:schemaLocation="http://www.springframework.org/schema/beans
  5.         https://www.springframework.org/schema/beans/spring-beans.xsd">
  6.    
  7.     <bean id="hello" class="com.jms.pojo.Hello">
  8.         <property name="str" value="Hello Spring"/>
  9.     </bean>
  10. </beans>
复制代码
可以看到上面service.xml中有一个import标签引用了dao.xml,这是因为下面用到了dao.xml里面的bean,所以需要import引用,如果是在同一个xml文件下则不需要。
接下来测试:
  1. @Test
  2.     public void UserService() {
  3.         //实例化容器
  4.         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("dao.xml", "service.xml");
  5.         //获取对象
  6.         UserService userService = applicationContext.getBean("userServiceImpl", UserServiceImpl.class);
  7.         userService.getUser();
  8.     }
复制代码
测试结果: 
 我们修改service.xml中的ref都会得到不同的结果:
  1. [/code][img]https://img2022.cnblogs.com/blog/2459242/202209/2459242-20220919094729451-308241643.png[/img]
  2. [code]
复制代码

 
 可见,我们不需要对代码进行修改,只需修改配置文件就可以实现不同的需求。
 
(本文仅作个人学习用,如有纰漏敬请指正)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表