码迷,mamicode.com
首页 > 编程说话 > 详细

一路学Spring之基本篇

时间:2019-10-10 00:32:45      浏览:37      评论:0      收藏:0      [点我收藏+]

标签:out   enc   lap   哪些   个先生   类型   xsd   actor   system   

本文重要讲解Spring的基本情况搭建和演变由来,仅供进修分享应用,如有缺乏的地方,还请斧正。

甚么是Spring ?

Spring是一个开源框架,用来处理营业逻辑层和其他层之间的耦分解绩。是以Spring将面向接口开辟的思维贯穿全部体系应用,且Spring是一个轻量级框架,所以在出生之初,便风行Java开辟市场,取得了广泛的承认与照应。

Spring基本概念

依附注入(DI:Dependency Injection)又叫控制反转(IoC:Inversion of Control):将组件对象的控制权从代码本身,转移到外部容器。Spring容器也是一个IoC容器,用来管理一切的Java Bean,主如果经过过程BeanFactory来停止产生和管理Bean。

Spring框架搭建

1. 建立一个Java Project

Spring框架是即支撑Java Project,又支撑Dynamic Web Project,以下所示:

技巧图片

2. 导入Spring框架须要的Jar包

Spring框架搭建须要的包共6个,以下所示:

1 //日记包
2 commons-logging-1.1.1.jar
3 //spring核心包
4 spring-aop-4.0.6.RELEASE.jar
5 spring-beans-4.0.6.RELEASE.jar
6 spring-context-4.0.6.RELEASE.jar
7 spring-core-4.0.6.RELEASE.jar
8 spring-expression-4.0.6.RELEASE.jar

3. 设备Spring设备文件

关于Java Project来讲,applicationContext.xml必须放在src目次,以下所示:

 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  http://www.springframework.org/schema/beans/spring-beans.xsd">
 6      <!-- 此文件默许放置在src目次 -->
 7      <!-- id表示唯一标识,class表示类型,必须为全途径 -->
 8     <bean id="student" class="com.hex.first.Student">
 9         <property name="id" value="1"></property>
10         <property name="name" value="hex"></property>
11         <property name="age" value="20"></property>
12     </bean>
13 </beans>

关于设备文件中的Student类,定义以下:

技巧图片
 1 package com.hex.first;
 2 
 3 /**
 4  * 定义一个先生类
 5  * @author Administrator
 6  *
 7  */
 8 public class Student {
 9     
10     /*
11      * 先生ID
12      */
13     private int id;
14 
15     /*
16      * 先生姓名
17      */
18     private String name;
19     
20     /**
21      * 年纪
22      */
23     private int age;
24     
25     public int getId() {
26         return id;
27     }
28     public void setId(int id) {
29         this.id = id;
30     }
31     public String getName() {
32         return name;
33     }
34     public void setName(String name) {
35         this.name = name;
36     }
37     public int getAge() {
38         return age;
39     }
40     public void setAge(int age) {
41         this.age = age;
42     }
43     
44     @Override
45     public String toString() {
46         // TODO Auto-generated method stub
47         return "ID="+id+",Name="+name+",Age="+age;
48     }
49 }
View Code

4. 声明对象

关于惯例声明对象和采取Spring获得对象的方法以下:

技巧图片
 1 //惯例New对象办法声明一个对象
 2 Student student=new Student();
 3 student.setId(1);
 4 student.setName("hex");
 5 student.setAge(20);
 6 System.out.println(student);
 7 //经过过程Spring停止注入,Spring高低文对象
 8 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 9 //从Spring的IOC容器中获得id为student的bean对象
10 Student student01=(Student) context.getBean("student");
11 System.out.println(student01);
View Code

5. 测试成果

以下所示:

技巧图片

采取Spring方法和传统方法的差别有哪些

传统方法全部采取硬编码的方法,一旦有更改,就须要修改代码,而Spring采取注入的方法,将可变的器械放在设备文件中,便于修改。

1. 起首假定一种场景,先生有一个进修课程的需求

关于课程的接口(ICourse),定义以下:

技巧图片
 1 /**
 2  * 定义一个课程接口
 3  * @author Administrator
 4  *
 5  */
 6 public interface ICourse {
 7     
 8     /**
 9      * 进修
10      */
11     void learn();
12 }
View Code

分别有两个完成类:JavaCourse和HtmlCourse,代码以下:

技巧图片
 1 package com.hex.first;
 2 
 3 /**
 4  * 进修Java课程
 5  * @author Administrator
 6  *
 7  */
 8 public class JavaCourse implements ICourse {
 9 
10     @Override
11     public void learn() {
12         System.out.println("进修Java课程。。。");
13 
14     }
15 
16 }
View Code

技巧图片
 1 package com.hex.first;
 2 
 3 /**
 4  * 进修Html课程
 5  * @author Administrator
 6  *
 7  */
 8 public class HtmlCourse implements ICourse {
 9 
10     @Override
11     public void learn() {
12         System.out.println("进修Html课程。。。");
13 
14     }
15 
16 }
View Code

假设一个先生要进修这两门课程,有以下三种完成筹划:

1. 第一种:原始的多态办法

在Student类中增长两个办法,分别用来进修Java和Html,以下所示:

技巧图片
 1     /**
 2      * 进修Java
 3      */
 4     public void learnJava(){
 5         ICourse course=new JavaCourse();
 6         course.learn();
 7     }
 8     
 9     /**
10      * 进修Html
11      */
12     public void learnHtml(){
13         ICourse course=new HtmlCourse();
14         course.learn();
15     }
View Code

调用代码以下:

技巧图片
1 //第1种,最原始的多态办法
2 System.out.println("第1种,最原始的多态办法:");
3 student.learnJava();
4 student.learnHtml();
View Code

备注:此筹划招致先生和课程之间构成强耦合关系,假设须要增长一种进修Python说话的课程,须要增长接口的完成类(PythonCourse),修改Student类,增长learnPython办法,修改较大年夜,或许有些先生只学个中一门课程,而另外一些先生学两门课程,采取此筹划会比较费事。

2. 第二种:采取简单工厂办法,将课程的创建抽离出来,由工厂同一管理。

在Student中增长一个进修(learn)办法:

技巧图片
1         /**
2      * 进修经过过程参数辨别
3      * @param name
4      */
5     public void learn(String name){
6         ICourse course=CourseFactory.getCourse(name);
7         course.learn();
8     }
View Code

增长工厂类(CourseFactory)

技巧图片
 1 package com.hex.first;
 2 
 3 /**
 4  * 课程工厂
 5  * @author Administrator
 6  *
 7  */
 8 public class CourseFactory {
 9     
10     /**
11      * 获得课程对象
12      * @param name
13      * @return
14      */
15     public static ICourse getCourse(String name){
16         if(name.equals("java")){
17             return new JavaCourse();
18         }else{
19             return new HtmlCourse();
20         }
21     }
22 }
View Code

然后客户端调用时只须要传字符串就行。以下所示:

技巧图片
1 //第2种,简单工厂办法
2 System.out.println("第2种,简单工厂办法:");
3 student.learn("java");
4 student.learn("html");
View Code

备注:此筹划固然将对象的创建剥离出来,由工厂停止管理,然则课程的类型照样硬编码的,照样不敷完美。

3. 第三种:采取Spring的方法,完成对象的静态注入

在先生类中增出息修办法,参数是ICourse接口:

技巧图片
1         /**
2      * 传递接口
3      * @param course
4      */
5     public void learn(ICourse course){
6         course.learn();
7     }
8     
View Code

在Spring设备文件中,设备要注入的对象:

1 <!-- 两个对象,没有属性,不须要赋值 -->
2 <bean id="java" class="com.hex.first.JavaCourse"></bean>
3 <bean id="html" class="com.hex.first.HtmlCourse"></bean>

经过过程Spring来获得对象,完成静态控制:

技巧图片
1 //第3种,经过过程SpringIOC完成
2 System.out.println("第3种,经过过程SpringIOC完成:");
3 ICourse course=(ICourse)context.getBean("java");
4 student.learn(course);
5 ICourse course2=(ICourse)context.getBean("html");
6 student.learn(course2);
View Code

以上三种方法,都可以完成需求,至于采取哪一种筹划,可以根据具表实际场景而定。

备注

没有伞的孩子,必须尽力奔驰!

等待一树花开,愿你叶落归来。

一路学Spring之基本篇

标签:out   enc   lap   哪些   个先生   类型   xsd   actor   system   

原文地址:https://www.cnblogs.com/hsiang/p/11612320.html

(0)
(0)
   
告发
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权一切 京ICP备13008772号-2
迷上了代码!