Spring 1.X
xml配置
Spring 2.x
注解配置 (@Component @Service)
基本配置(如:数据库配置)用XML,
业务配置用用注解
Spring 3.x Spring 4.x 最新是 5.1.5 20190323
Java配置
Spring框架
轻量级的企业级开发的一站式解决方案
Ioc容器,Aop,数据访问,Web开发,消息,测试
POJO Plain Old Java Object 无任何限制的普通Java对象
被Spring管理的对象称之为 Bean
M2_HOME
E:\apache-maven-3.2.2
;%M2_HOME%\bin
groupId 组织的以为标识 com.zhangsan artifactId 项目的唯一标识 test-demo 中划线 version 版本 4.1.5.RELEASE变量定义
${spring-framework.version}
编译插件
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
${java.version}
jar的依赖不会写,到http://mvnrepository.com检索
自己的jar导入到自己的仓库
mvn install:install-file -DgroupId=com.oracle “-DartifactId=ojdbc14” “-Dversion=10.2.0.2.0” “-Dpackaging=jar”
“-Dfile=D:\ojdbc14.jar”
org.springframework.boot
spring-boot-starter-web
boot开始引用了webmvc tomact等,webmvc中引入了context spring-core等
org.springframework
spring-webmvc
org.springframework
spring-context
org.springframework.boot
spring-boot-starter-test
test
spring tool suite STS 开发工具
Eclipse 安装M2E插件
NetBeans
spring的四大原则
pojo轻量级最小侵入开发
依赖注入 基于接口编程,松耦合
Aop和声明式编程
模板
约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性
控制反转 Inversion Of Control IOC
依赖注入 dependency Injection DI
在spring环境下是等同的概念
控制反转是通过依赖注入实现的
依赖注入 是容器负责创建对象和维护对象间的依赖关系
解耦,组合
一个类具备某个功能,组合另个类有此功能的类
Spring 使用 xml 注解 java配置 groovy配置,实现bean的创建和注入
生命bean
@Component没有明确角色
@Service @Reponsitory @Controller
注入bean 可设置在set方法和属性上
@Autowired
@Inject
@Resource
Spring容器类 AnnotationConfigApplicationContext
@Service
public class FunctionService {
public String sayHello(String word){
return "hello"+word+"!";
}
}
@Service
public class UseFunctionService {
@Autowired
FunctionService functionService;
public String SayHello(String word){
return functionService.sayHello(word);
}
}
@Configuration //声明式配置类
@ComponentScan("com.example.demo1") //自动扫描这个包下的 @Service @Componet 并注册为Bean
public class DiConfig {
}
public static void main(String[] args) {
//使用 注解 配置 应用 上下文 作为 Spring容器
AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext(DiConfig.class);
//获得声明式配置 的这个类
UseFunctionService us=context.getBean(UseFunctionService.class);
System.out.println(us.SayHello("张三"));
context.close();
}
Java配置 通过@Configuration 和 @Bean实现
声明当前类是一个配置类,相当于一个Spring配置的xml文件
@Bean注解在方法上,声明当前方法返回值为一个Bean
全局配置使用Java配置,(如数据库相关,MVC相关)
业务Bean配置,使用注解配置(@Service)
public class FunctionService {
public String sayHello(String word){
return "hello"+word+"!";
}
}
public class UseFunctionService {
FunctionService functionService;
public void setFunctionService(FunctionService functionService){
this.functionService=functionService;
}
public String SayHello(String word){
return functionService.sayHello(word);
}
}
@Configuration
public class JavaConfig {
@Bean
public FunctionService functionService(){
return new FunctionService();
}
@Bean //当前方法返回一个bean,bean是方法名
public UseFunctionService useFunctionService(){
UseFunctionService us=new UseFunctionService();
us.setFunctionService(functionService());
return us;
}
//@Bean //直接将FunctionService作为参数,只要存在某个Bean,就可当做参数
/*public UseFunctionService useFunctionService(FunctionService fs) {
UseFunctionService us = new UseFunctionService();
us.setFunctionService(fs);
return us;
}*/
}
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(JavaConfig.class);
UseFunctionService us=context.getBean(UseFunctionService.class);
System.out.println(us.SayHello("java Config"));
context.close();