Spring5 (1) - HelloWorld

2018-09-15  本文已影响21人  小白201808

本人使用的开发是工具是STS

一、我们以传统的方式去写一遍HelloWorld

打开sts,做的一次练习的准备工作

a.创建一个名为Spring5_base的java工程
b.在该工程的src目录下创建一个名为com.keen.hello的包

(1) 在该包下创建一个HelloWorld类

package com.keen.hello;

public class HelloWorld {
   private String username;
   private int age;
   
   public void setAge(int age) {
    this.age = age;
   }
   
   public void setUsername(String username) {
    this.username = username;
   }
   
   public void sayHello() {
       System.out.println("Welcome to the world of sping5,hello: "+username +" age :"+age);;
   }
}

(2) 在该包下创建一个单元测试类HelloWorldTest

package com.keen.hello;
public class HelloWorldTest {

    @Test//使用传统的方式写一遍
    void testOld() throws Exception {
        //创建一个对象
        HelloWorld world = new HelloWorld();
        //给当前对象设置相关属性
        world.setUsername("keen");
        world.setAge(12);
        world.sayHello();
        
    }

(3) output:

Welcome to the world of sping5,hello: keen age :24

二、我们使用spring写一遍

(1) 创建相同的一个HelloWorld类

package com.keen.hello;

public class HelloWorld {
   private String username;
   private int age;
   
   public void setAge(int age) {
    this.age = age;
   }
   
   public void setUsername(String username) {
    this.username = username;
   }
   
   public void sayHello() {
       System.out.println("Welcome to the world of sping5,hello: "+username +" age :"+age);;
   }
}

(2) 此时我们要做一些准备工作

 1.在该工程下创建一个lib文件,导入jar包(我使用的是Spring5)
  我们需要引入连个jar包,spring-beans-5.0.0release.jar
  Spring-core-5.0.0release.jar,并选中右键build path
  2.在该工程下创建一个资源包命名为resource,并在该包下创建一个SpringBeanConfigurationFile,命名为applicaationContext.xml ,
  接着点next(配置一下文件的schema约束),选第一个beans,然后在接下来的select desired xsd,选中第一个 .../schema/beans/spring-beans.xsd

接着出现就这个xml文件了:(这就是传说中的配置文件了)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

(2)接着我们在这个文件中配置bean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  
<!-- 通过配置,告诉Spring的IOC容器,你需要帮我管理哪个类的对象 -->
<!--这里的id作为bean的名字,你可以写你喜欢的名字(规范就好),class是用来指定HelloWorld的路径,用于反射得到bean的实例-->
<bean id = "helloWorld" class="com.keen.hello.HelloWorld">

<!-- 操作属性 ,类似我们传统方法的set属性,注入信息-->
<property name = "username" value = "keen"/>
<property name = "age" value = "18"/>
</bean>
</beans>

(3)在测试类中启动并使用Spring容器

@Test
   void testIoc() throws Exception {
       HelloWorld world = null;
       
       //-----------------------
       //1.从classpath 路径寻找配置文件的路径,创建资源对象
       Resource resource = new ClassPathResource("applicationContext.xml");
       
       //2.根据资源对象,创建Spring IOC 容器对象
       BeanFactory factory = new XmlBeanFactory(resource);
       
       //3.从spring Ioc容器中获取指定的名称(helloworld)的对象
       world = (HelloWorld) factory.getBean("helloWorld");
       
       world.sayHello();
       
       
   }

output:

Welcome to the world of sping5,hello: keen age :18 
在这个简单的HelloWorld中使用Spring,我们似乎发现比传统的方法更加麻烦,但是听说(因为我也是刚接触),在以后大的开发项目中,优势就显示出来了。
其实applicaationContext.xml配置文件帮我们做了很多工作的。

如果没有配置文件,我们需要写以下或者更多的代码

//模拟SpringIOC容器的操作
    @Test
    void testIocMock() throws Exception {
        String className = "com.keen.hello.HelloWorld";
        HelloWorld world = null;
        
        //----------------------
        //使用反射创建对象
        Class clzz = Class.forName(className);
        Constructor con = clzz.getConstructor(); 
        con.setAccessible(true);//设置构造器的可访问属性
        Object obj = con.newInstance();
        
        //使用内省机制设计属性值
         BeanInfo beanInfo= Introspector.getBeanInfo(clzz);
         PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
         
         for(PropertyDescriptor pd:pds) {
         
             //HelloWorld类中的所有的属性的名称
             String propertyName = pd.getName();
             
             if("username".equals(propertyName)) {
                 //调用username的setter方法
                 pd.getWriteMethod().invoke(obj, "lucy");
                 
             }else if ("age".equals(propertyName)) {
                 //调用age的setter方法
                 pd.getWriteMethod().invoke(obj, 18);
                 
             }
         }
         
        world = (HelloWorld)obj;
        //----------------------
        
        world.sayHello();
    }

好了,今天的sprig-helloworld就学到这吧!

上一篇下一篇

猜你喜欢

热点阅读