备注:最近复习一下spring的相关知识,准备从零-->springboot-->springcloud的一系列的使用,有浅入深,为了以后复习方便查看。
1.spring框架本身的四大原则:
1)使用POJO进行轻量级和最小侵入式开发
2)通过依赖注入和基于接口编程实现松耦合
3)通过AOP和默认习惯进行声明式编程
4)使用AOP和模板(template)减少模式化代码
spring所有功能的设计和实现都是基于此四大原则的。
2.依赖注入
依赖注入主要目的就是解耦,体现了一种组合的理念,如果你希望你的类具备某项功能的时候,是继承一个具备此功能的父类好,还是组合另外一个具有这个功能的类好,可想而知,继承父类耦合度太高,如果组合的话,则会使耦合度大大降低。
3.简单示例
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.minivision.caixing.learn</groupId>
<artifactId>caixing_learn</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
FunctionService.java
package com.minivison.caixing.learn;
import org.springframework.stereotype.Service;
/**
* <Description> <br>
*
* @author caixing<br>
* @version 1.0<br>
* @taskId <br>
* @CreateDate 2018年04月12日 <br>
*/
@Service
public class FunctionService {
public String sayHello(String word){
return "hello "+word+"!";
}
}
UseFunctionService.java
package com.minivison.caixing.learn;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <Description> <br>
*
* @author caixing<br>
* @version 1.0<br>
* @taskId <br>
* @CreateDate 2018年04月12日 <br>
*/
@Service
public class UseFunctionService {
@Autowired
private FunctionService service;
public String SayHello(String word){
return service.sayHello(word);
}
}
Config.java
package com.minivison.caixing.learn;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* <Description> <br>
*
* @author caixing<br>
* @version 1.0<br>
* @taskId <br>
* @CreateDate 2018年04月12日 <br>
*/
@Configuration
@ComponentScan("com.minivison.caixing.learn")
public class Config {
}
Main.java
package com.minivison.caixing.learn;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* <Description> <br>
*
* @author caixing<br>
* @version 1.0<br>
* @taskId <br>
* @CreateDate 2018年04月12日 <br>
*/
public class Main {
public static void main(String[] args){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
UseFunctionService service = context.getBean(UseFunctionService.class);
System.out.println(service.SayHello("spring"));
}
}