Spring全称为Spring Framework,是一款主流的JAVA EE 开原框架,主要功能有:IOC(控制反转,层间解耦)、AOP(面向切面编程,公共代码抽取)、MVC(开发web应用程序)、数据库事务管理、web单元测试(与测试框架集成) 。
传统方式三层架构web-->service-->dao,代码层间耦合,servlet需要service就由Servlet主动创建,而Spring的方式,所有的对象都是1由Spring框架提前创建出来,存储到一个容器中,servlet需要就像Spring要一个。
IOC控制反转是一种设计思想,它的目的就是使程序解耦合。spring的核心依赖为org.springframework下的spring-context,代码编写过程直接用springboot快速构建spring项目,这里只是讲基础知识。
向Spring声明自己开发的类对象的注解有四个:
1.@Component 用于实例化对象,支持value属性类定义bean在容器中的唯一标识(属性只有value,一个属性需要赋值时,可以省略属性名,直接写属性值),如果不写默认值为类名的首字母小写,为通用注解。
2.@Controller 标注在表示层的类上
3.@Service 标注在业务层的类上
4.@Repository 标注在持久层的类上
在类上可以标上注解@Scope定义Bean的作用域,5中作用域常见的两种,singleton单例和propotype多例。默认情况下单例对象在容器创建时就创建,可以标注@Lazy将创建时机延迟到第一次获取的时候创建。
Bean的获取,原始方法可以使用容器的getBean()方法,但是实际代码开发中都是让Spring帮助我们完成对象属性的复制,即依赖注入DI思想。注解就是@Autowired,在有多个相同类型的bean时需要配合@Qualifier注解(标注在要赋值的属性上,可按指定名称匹配赋值)或 @Primary(标注在实现类上,声明默认的主实现类)
上述都是自己创建的类放入IOC容器中,第三方提供的类创建的对象放入Spring容器可以使用@Bean注解,写在方法上,将方法的返回对象放入IOC中,IOC中的默认标识就是方法名,也可@Bean(“****”)自定义,这些东西要写在配置类中(@Configuration标注,表名类为配置类,spring在启动时会自动扫描加载类中的配置)。配置类上可能会有@ComponentScan(一般标注在主配置类上),注解扫描(组件扫描),指定的包及其子包下的类的注解才会被Spring扫描。
Spring对Junit单元测试进行了封装形成了自己的单元测试@RunWith+@ContextConfiguration(代码不用,SpringBoot又进行了简化)=@SpringBootTest标注在测试类上(必须在启动类所在包下)(引入junit依赖启动器 spring-boot-starter-test),测试方法正常标注@Test。