Spring核心概念学习
Spring的Spring MVC 、 Spring Boot、 Spring Cloud系列、Spring JPA、Spring Data…
1. 了解Spring
Spring:春天,的确是Java开发的春天。 整个颠覆了我们的开发形式!它的核心思想就是IoC和AOP。
Sun公司(Java母公司),EJB(企业JavaBean) 企业开发用,也是Java EE框架,本来Sun公司希望开发一款能够极大降低企业开发效率,以及提升应用性能的优秀企业级框架,它也是为了分布式来去设计的一种框架,但是最初诞生的版本,并没有达到预期的效果。
结果这个框架一经推出,就被广大用户所诟病,而且这个框架侵入式很强,开发效率反而并没有提升。
EJB框架后来回炉重造,出了一个EJB3.0,这个框架的确不错,Hibernate的创始人就是EJB3.0开发组的成员。但是因为彼时其他的第三方框架已经逐渐占领市场,所以它的应用伴随着Sun公司的收购也逐渐消亡。
2002年时候Rod Johnson编写了一本书,2004年根据这本书构建了第一版Spring。
Spring:轻便、灵巧,易于开发、测试和部署的轻量级开发框架。
SSH框架 SSM框架主流的两套框架,它们中间的S都是Spring!
因为Spring的思想设计非常优秀,所以很多第三方组件(框架、工具)它们都会Spring做了"无缝集成",一种生态与之形成。
2. 掌握Spring环境搭建
作为最核心的内容,如果想构建一个Spring应用,必须要导入以下三大组件。它们构成了Spring中的IoC。
-
导入核心包(beans、core、context、[expression]、commons-logging、log4j.xx.xx)
-
编写具体业务
public class HelloSpring { private String who; public void printHello() { String str = String.format("Hello,%s!", who); System.out.println(str); } public String getWho() { return who; } public void setWho(String who) { this.who = who; } }
-
编写核心配置文件applicationContext.xml ,在其中编写对应的bean组件内容,实现对业务类们的生命周期托管和依赖注入
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Spring是面向Bean编程 Bean可以理解为是一个个的Java类对象 --> <!-- 需求: 编写一个HelloSpring类,它能够输出"Hello,Spring!"内容 而输出的内容"Spring"应该是由Spring框架的IoC来帮你实现的注入。 --> <!-- 配置HelloSpring类的Bean将其生命周期交给Spring来管理 --> <!-- id:在Spring中的一个唯一bean标识 class:你要管理的类的全类名 --> <bean id="helloSpring" class="cn.kgc.demo1.HelloSpring"> <!-- 依赖注入 --> <!-- ref 引用其他的bean --> <property name="who" value="王志娟"/> </bean> </beans>
3. 理解Spring的IoC原理
**IoC:Inversion of Control 控制反转 **
在控制反转中,后来有一个专家觉得单纯的提控制反转可能无法完全表示它的含义,所以又提出一个DI Dependency Injection依赖注入。
在这种思想中就应用了咱们的简单工厂模式,当然也不仅仅是它。
简单工厂模式:根据客户提供的描述,产生对应的实例。
简单理解IoC:以前你自己需要创建对象,现在对象的创建、销毁等(生命周期)操作都交给Spring的IoC来管理,当你需要什么组件的时候,会自动给你创建并传入(DI)。
public class UserServiceImpl implements UserService{
private UserDao userdao = new UserDaoImpl();
public void add(){
userDao.xxx();
}
}
main(){
UserService userService = new UserServiceImpl();
userService.add();
}
-------- 有了Spring之后
public class UserServiceImpl implements UserService{
// DI依赖注入
private UserDao userDao;
public void add(){
userDao.xxx();
}
}
main(){
// IoC最基本形式
UserService userSerice = Spring工厂.getBean("userService");
userService.add();
}
4. 理解Spring的AOP原理
AOP:(Ascpet切面 Oriented面向 Programming)面向切面编程
**AOP原理:**将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。
所谓面向切面编程,是一种通过预编译和运行期动态代理的方式实现在不修改源代码的情况下给程序动态添加功能的技术。
public class TestServiceProxy extends TestService {
@Override
public void add() {
// 记录日志
System.out.println("记录方法开始!");
try {
// 调用方法
super.add();
} catch (Exception e) {
// 记录异常
System.out.println("记录方法异常!");
}
// 记录日志
System.out.println("记录方法结束");
}
}
5. 掌握AOP的应用
应用:利用AOP实现日志记录