这些天终于从考试中脱开身来,准备学习Spring Boot,但是教导Spring Boot的老师说学习Spring Boot需要有一些基础知识:Spring,Maven,还有编译器idea的使用。对于这三个中的最基础的Spring我就接触不多,所以在谷粒学院中找了教授Spring的老师,跟着学习了四天,终于对Spring有了个大概的了解,今天就对着这四天的学习做一个学习笔记。
对于看到这篇博客的同学们,如果你们最近也打算学习Spring或者Spring Boot,我的建议是要有一定的基础,java无可厚非当之第一位,java语言一定要学习,不然最初的课程也会看不懂。除此之外,最好有一些其他的java开发的相关知识,比如:MySQL,JDBC,Hibernate,JavaWeb,Struts2。前三个都是与数据库有关,后面两个都是与web相关。这些知识都有助于spring后面的学习,如果没有,就会像我一样学得很辛苦,越到后面越听不懂。
Ps:学习计算机高深技术的魅力就是,学习一门课的时候,你会发现有些基础知识要去掌握,而学习基础知识的时候,又有一些更为基础的知识要去学习。
Spring的两大基石就是依赖注入(IOC)和面向切面编程(AOP)。这两个基石也是我这几天学习的基础与重点。当然,要打代码的话,这两个基石都不够搭建Spring开发环境基础,至于如何在eclipse下搭建网上都还是会有教程的。做Spring开发最麻烦的就是要导入jar包,每一个项目都要导入不同的jar包,有一些jar还需要自己去找,所以这就是Spring的麻烦之处,学习Spring Boot就可以克服这些问题。
我们先看看spring里的helloworld和java普通工程的helloworld有什么区别,下面是Spring的helloworld:
Helloworld.java:
package com.huashi.spring.helloworld;
public class HelloWorld{
private String uerName;
public void setUserName(String userName){
this.userName = userName;
}
public void hello(){
System.out.println("Hello: "+userName);
}
}
Main.java:
public static void main(String[] args) {
//1.创建Spring的IOC容器
ApplicationContext ctx=
new ClassPathXmlApplicationContext(("applicationContext.xml"));
//2.从容器中获取bean
HelloWorld helloworld = (HelloWorld) ctx.getBean("helloWorld");
System.out.println(helloWorld);
//调用方法
helloWorld.hello();
}
applicationContext.xml:
导入的jar包:
与普通的java项目是不是多了很多步骤,其中配置Main.java和applicationContext.xml都是与配置bean息息相关,配置bean也是IOC技术的核心,配置bean有两种方法:1.基于XML文件的方式;2.基于注解的方式;第一个方式老师花了大量时间去讲解,其中里面还包含了bean的其他配置方式:基于全类名;通过工厂方式(静态工厂和动态工厂);除此之外,还有其他bean的相关知识。这里就不一一列举了,大家可以自己去看看:谷粒学院spring教程,这里面都有细致讲解和代码示例。而基于注解的方式也是被Spring Boot沿用下来,基于注解也有其特殊的使用方法,这里提一下几种常见的注解:
@Autowired:用于自动装配具有兼容类型的单个bean属性;
@Override:用于方法的重载和复写;
@Aspect:指明该类是面向切面的,与该注解一起使用的还有@Before,@After,@AfterReturning,@AfterThrowing,@Before表示切面前,@After表示切面后,@AfterReturning表示函数return后,@AfterThrowing表示抛出异常后,它们这四个都是结合execution使用,比如:@before(“execution(public int com.huashi.xie.example.函数名(int,int))”),其中public和int都可以使用*代替,函数名也可以使用*代替,函数里面两个参数可以使用(..)代替,表示是某个包里面某个函数之前使用。另外,使用@Pointcut来替代execution整体,大家可以上网查查用法;
@order(数值):用于切面的优先级,数值越小优先级越高;
@Transactional(参数):将该方法指明为支持事务处理的,其中有两个常用的参数:REQUIRES和REQUIRES_NEW ,两个 参数的使用可以看下文中的事务处理中的例子;
这些都是比较常见的注解,除此之外:
@Controller:标注控制层;
@Service:标注服务层(业务层);
@Repository:标注数据访问层,即Dao组件;
@RestController:相当于@ResponseBody+@Controller,用于返回JSON;
@Component:标注泛类,当组件不好归类,即非controller,service,repository时使用;
都是最为基础的注解。
其实了解了这些注解,也差不多对spring的基础有了个大概的了解了。当然,对于Spring中的某些知识点和概念还是要拿出来说一下的:
(1)IOC:依赖注入,就是配置bean,建立IOC容器,上面的*.xml中
(2)AOP:面向切面。切面:即横切关注点(跨越该应用程序的多个模块的功能)被模块化的特殊对象,常见的有验证和日志。以前面对这些验证日志代码编写困难,管理困难。现在Spring使用AspectJ注解框架解决该问题(使用@Aspect)。
(3)事务管理:事物就是一系列的动作,它们被当做一个单独的工作单元,这些动作要么全部完成,要么全部不齐作用,要确保数据的完整性和一致性。比如要购买n本书,钱只够买m本(m (4)对JDBC的支持,对Hibernate的支持:就是对该两种数据库操作的支持,由于我对数据库知识有限,所以学得不清不楚。 (5)整合struts2:web应用开发。该知识我更是学得不明不白,所以大家一定要有这些方面的知识储备。 这便是这段时间对Spring学习的一个总结,如果有误,欢迎指正与讨论。