1、Spring的工厂类2、Spring的Bean管理(XML方式)2.1 使用类构造器实例化(默认无参数)2.2 使用静态工厂方法实例化(简单工厂模式)2.3 使用实例工厂模式3、Spring的属性注入(XML方式)3.1构造方法注入3.2属性setter方式注入3.3 p名称空间3.4 SpEL(Spring Expression Language)注入4、Spring的Bean管理(注解方式)4.1Bean的管理5 属性注入的注解5.1 @Value的使用5.2 @Autowired的使用5.3 @Qualifier的使用5.4 @Resource的使用5.5 Spring的其他注解

Spring概述:

The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
A key element of Spring is infrastructural support at the application level: Spring focuses on the “plumbing” of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.
这是Spring官方文档给出的定义,我相信这是最标准的Spring定义,大致意思是说Spring为基于Java的企业应用程序提供了全面的服务,Spring提供了一个专注企业应用程序的“管道”,所以开发人员可以专注于企业开发而不用花时间在部署特定环境上面。
简单说一下Spring的特点:
1、Spring是开源的(免费免费免费!)
2、Spring为简化企业级应用开发而生。使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能
3、Spring是JavaEE/SE的一站式框架。
Spring的优点:
1、方便解耦(Spring像婚姻介绍所,所有的对象都归他管,需要对象只管拿就行)
2、AOP编程的支持(提供切面编程支持,可以实现对程序的权限拦截、运行监控等功能)
3、声明式事务的支持(只需通过配置就可以实现对事务的管理,无需手动编程)
4、方便程序的测试(Spring对Junit4支持,测试很方便)
5、方便集成其他框架(Spring不排斥其他框架,可以集成包括Struts、Hibernate、Mybatis等)
6、降低了javaEE API的使用难度(Spring对JavaEE开发中非常难用的API都进行了封装,使这些API应用难度大大降低)

前言

现在理解这句话可能有点费劲,我们先带着疑问先开始学习,Spring有几个关键字,Spring官方文档也为我们罗列出来了,为了阅读方便,我已经翻译了,想看原文的可以点我~:
核心技术:依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。
测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。
数据访问:事务,DAO支持,JDBC,ORM,编组XML。
Spring MVC和Spring WebFlux Web框架。
集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。
语言:Kotlin,Groovy,动态语言。
本篇博客作为入门博客,仅围绕以上粗体字进行展开。

Spring入门

Spring有两个非常重要的关键词,一个是IoC(Inversion of Control)控制反转,另一个是DI(Dependency Injection),那么到底是什么意思呢?又有啥用呢?
我们传统的Java开发是先写一个接口,然后写这个接口的实现类,最后再调用实现类里面的方法,比如:
//接口publicinterfaceUserService{publicvoidsayHello();}//实现类publicclassUserServiceImplimplementsUserService{// 添加属性:private String name;publicvoidsayHello(){ System.out.println("Hello Spring"+ name);}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}}//测试类publicclassSpringDemo1{@Test//传统方式开发publicvoiddemo1(){// UserService userService = new UserServiceImpl(); UserServiceImpl userService=newUserServiceImpl();// 设置属性: userService.setName("张三"); userService.sayHello();}}
可以看到,传统开发必须通过手动创建UserServiceImpl类,然后再通过其对象调用类中方法或成员变量,这样开发的耦合度极高,如果有了新的需求,则必须修改源码,比如我想把名字换成李四,则必须打开这个源文件修改userService.setName(“李四”);现在这个例子代码少,可是假如有上千行代码呢?要修改100个数据呢?那是真的很不方便,估计很快就眼花了,再看看把控制权交给Spring有啥好处:
Spring只需要修改配置文件(名称最好是applicationContext.xml,这样比较规范,不过改成别的名字也不错):