这是使用CSDN新账号写下的第一篇文章。
多年的管理工作,渐渐忘记了技术研发的快感。产业最近发掘的新方向,对自己来说也是一次难得的转身,于是在2018年的春节,终于下定决心逃离“舒适区”。一大把年纪,这次选择着实带来了不小的压力。为了延续职业生涯,也为了发自内心的快乐,80后IT老飞侠满血复活。
================下面是正文,不再感慨和废话===================
Spring对很多人来说早已不是新技术,但由于业务领域不同,对我来说却足以带来很多兴奋感。今天以一个极简的Demo开始记录2018年的满血转身。
Spring Framework有两个关键的概念:
1)依赖注入(Dependency Injection):通过配置或注解方式,委托Spring Framework进行对象管理,是IoC的一种实现方式。
2)面向切面(Aspect Oriented Programming):通过配置或注解的方式,将分散到应用各处的行为放到可重用的模块中,减少代码冗余。
这是一个使用Spring Framework,通过XML配置进行依赖注入的极简Demo。
Demo包含1个接口和2个类,它们的关系如下图所示:
HelloSpring Interface代码如下:
package com.study.spring;
public interface HelloSpring {
public String sayHello();
}
HelloSpringImpl Class代码如下:
package com.study.spring;
public class HelloSpringImpl implements HelloSpring{
public String sayHello() {
return "Hello Spring";
}
}
Main Class代码如下:
package com.study.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//Create IoC container through XML
ApplicationContext apc = new ClassPathXmlApplicationContext("HelloSpring.xml");
//A HelloSpringImpl instance injected
HelloSpring hello = apc.getBean("helloSpring", HelloSpring.class);
System.out.println(hello.sayHello());
}
}
HelloSpring 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-3.0.xsd">
<bean id="helloSpring" class="com.study.spring.HelloSpringImpl"></bean>
</beans>
在XML文件中,配置了一个ID为“helloSpring”的Bean,其类定义是“HelloSpringImpl”。在Main中,创建一个容器来保存Spring Framework创建的Bean实例,并通过“getBean()”方法获取对象引用。在整个过程中,“HelloSpringImpl”对象的创建完全由Spring Framework负责,业务代码只负责使用即可,这就是最简单的IoC过程。
运行Main结果如下,欣喜的打印出“Hello Spring”:
3月 06, 2018 7:57:55 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7fac631b: startup date [Tue Mar 06 19:57:55 CST 2018]; root of context hierarchy
3月 06, 2018 7:57:55 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [HelloSpring.xml]
Hello Spring
有趣的旅程刚刚开始,晚安