【JavaSpring第一天】环境搭建、Spring IOC 控制反转、DI依赖注入、 AOP面向切面编程
Spring day01
环境搭建
开发的ide(集成开发环境)工具:eclipse,myeclipse等
eclipse解压缩即可:
eclipse启动的时候会自动寻找jdk(jre)
jdk:java的开发工具包,java.exe ,javac.exe
jre:java的运行时环境 ,包括java项目运行所需要的所有类库
tools.jar,rt.jar等
jvm:java的虚拟机,java的程序需要运行在jvm上
jdk包含一个jre,在jre中有jvm
Eclipse ide工具的编码设置
window--preferences--general--workspace--text file encoding--UTF8
eclipse跟jdk绑定,自动绑定,eclipse启动必须需要jdk(jre(jvm)) 额外添加jre
window-preferences--java--installed jres--add--浏览jre的目录 eclipse跟tomcat绑定:
window--preferences(首选项)--server--runtime environments --add--选择tomcat版本,打一个对勾--选择tomcat的实际路径(注意不要带中和空格)--选择tomcat所使用的jre的版本--finish
配置完eclipse跟tomcat的绑定后
此项servers内存储是当前eclipse中所有服务器配置,如需要重新配置tomcat 服务器,可以直接修改servers中内容,也可以删掉并按上面的步骤重新配置 同时,又出现了
双击tomcat v8.0项会出现
此时不能配置修改,原因是tomcat服务器中已经有项目了 需要删除,右键tomcat v8.0 选择add/remove后,再clean
选择第三项:用户自定义运行项目的位置
需要注意
Serverpath:c:\apache-tomcat-8.0.23\webapps Deplaypath:wtpwebapps
上面两个路径的拼接结果
c:\apache-tomcat-8.0.23\webapps\wtpwebapps
此路径中放置的就是实际运行项目
other:
开发路径:eclipse开发源代码路径,就是工作空间中的路径 D:\WorkSpace\oxygen\TestWebProject\src
运行路径:开发完的项目部署到运行路径中(需要程序员配置)
c:\apache-tomcat-8.0.23\webapps\wtpwebapps\TestWebProject
工作路径:运行路径中的jsp文件,转译和编译后的文件存储位置(自动生成) c:\apache-tomcat-8.0.23\webapps\work
work工作路径可以随时删除,重新启动tomcat,会自动创建work文件夹
类路径classpath路径:(java项目和web项目都有类路径)
java项目:在工作空间中的bin目录就是Java项目的类路径,Java项目的运行路径
web项目:在tomcat的运行路径中项目名称里的WEB-INF\classes目录就web项目的类路径,也可以叫web项目的java代码的运行路径
Clean:用来删除所有的.calss文件,然后重新编译生成一份
1.project--clean 清除开发路径中的class文件
2.右键tomcat v8.0-clean 清除web项目中.class文件
框架部分:
什么框架:框架就是第三方个人或公司做好的功能封装
框架的好处:
三个框架统称SSM
spring框架:整合市面上常见的框架,是对象管理框架
Spring mvc框架:很好的实现mvc模式
Jsp,servlet也实现了mvc模式
servlet中只做三件事:
1.获取页面提交的数据
2.调用具体的业务--service
3.一定根据业务返回结果做判断然后跳转
Spring mvc:
1.获取页面提交的数据,springmvc帮程序员做了
2.调用具体的业务--service 程序员只需要关注业务实现
3.一定根据业务返回结果做判断然后跳转springmvc帮程序员做了
mybatis框架:
dao操作是数据库操作:
1.获取连接
2.构建sql语句
3.基于连接把sql语句送到数据库
4.如果sql语句有占位符?,需要给占位符赋值
5.如果dml(增删改)就执行executeUpdate,返回结果是受影响的行数
如果是dql(查询)就执行executeQurey 返回结果ResultSet
6.解析ResultSet
7.关闭所有资源
有了mybatis,恭喜你,只需要提供连接和sql语句和参数, 剩下全都交给mybatis
学习一个新的框架或知识步骤:
1.先去百度或google搜索完成某个功能所需要的完成此功能的框架
2. 去框架指定的官方网站下载jar包
3.在官方网站上寻找官网提供的资源,利用资源,想尽一切办法写一个小demo
a.在官方网站上寻找案例
b.在官网上寻找官方文档(介绍框架的使用),好的,使用的多的一定有好的文档
c.只能祈求上苍,某个不开眼的在某个博客上写了案例(csdn,iteye,cnblog...)
d.放弃吧
spring框架:
核心技术:IOC控制反转,IOC容器
DI依赖注入 AOP面向切面编程
数据访问:事务管理,dao支持,jdbc
Spring IOC 控制反转 inversion of control
控制反转:把所有new的对象反转到第三方spring去new,然后由spring统一管
理对象,就是new对象的控制权交给spring框架来创建和管理
Spring ioc第一个案例:如何把一个类的对象交给spring来创建和管理
-创建工程 工程是基础
-导入spring 的jar包 功能基础
-创建一个类 准备把个类让Spring来创建对象
-创建spring的配置文件 是一个清单文件,指定哪个类由spring来创建的对象
-启动spring容器 启动spring,由spring来读取清单文件
-从spring容器取出创建完的对象,备用
导入基本jar包
创建一个类:
启动spring容器,并获取对象:
常见的错误和注意事项:
spring配置文件,清单文件(指定哪些类需要spring实例化)
注意,此文件模板一定从对应版本的开发文档上获取,
注意版本匹配问题
1.xml文件头写错了,一定要对应版本的文档里拷贝出来的 2.<bean id="" />,此id值不可以重复,必须唯一
3.<bean class="" />包名和类名必须准确,验证ctrl+
如果正确,才可以Class.forName("com.tarena.ioc.Hello") .newInstance();
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem:
Bean name 'haha' is already used in this <beans> element
Bean name 'haha' is already used in this <beans> element Offending resource: class path resource [resources/spring.xml]
bean的名字haha已经被使用在这个Beans元素里
Eclipse mar2:
有Caused by:先看Caused by:,如果有多个Caused by:,看最下面的Caused by:
Caused by: java.lang.ClassNotFoundException: com.tarena.ioc.Hello1
Eclise oxygen:
Cannot find class [com.tarena.ioc.Hello1] for bean with name 'hello' defined in class path resource [resources/spring.xml]; n ested
exception is java.lang.ClassNotFoundException: com.tarena.ioc.Hello1
没有haha1的可以使用,说明在spring的容器没
有叫haha1的对象
No bean named 'haha1' available
总结:
1.用spring的ioc可以解耦对象
耦合分为三种
没有耦合 说明类和类之间没有任何关系
抽象耦合 说明当前类中耦合的是另一个接口或抽象类
具体耦合 说明当前类中耦合的具体实现类
把应该出现类中的new的具体实现,反转到spring容器中
2.spring原理
//启动spring容器,并读取和解析清单文件
ApplicationContext context =
new ClassPathXmlApplicationContext(
"resources/spring.xml");
a.spring一定要正确加载和解析spring.xml文件
b.把spring.xml中的bean节点的内容解析出并存储(map)
c.循环遍历map集合中的所有数据
取出class属性对应的值,反射实例化对象
Object obj=Class.forName("包名.类名").newInstance();
d.把所有创建完的对象存储另一个map集合,id当key,对象当value
spring容器就是一个集合
//从spring容器取出对象
Hello hello=(Hello)context.getBean("haha1");
haha1作为key去spring容器map集合中找对应的对象
从spring容器获取的方式
通过getBean() api方法
getBean(Class);//按照类型获取 ,必须容器中的类型对象唯一
getBean(String);//按照id获取 必须强制转换到具体类型的对象
getBean(Class,Object);
getBean(String,Class);//按照id和类型,不需要强制转化
getBean(String,Object);
解决无法提示的问题: 1.从官方网站找到对应的xsd文件,一般开发文档有
2.拷贝xsd到本地硬盘的某个目录中,建议目录浅一些
3.在spring的清单文件中指定本地硬盘上xsd文件的位置
spring容器,可以实例化一个类的对象多次
spring容器,实例化一次,但getBean多次
spring容器可以把一个类实例化多次
id必须唯一
Spring容器实例化对象有四种方式
1.通过无参构造的方式实例化对象(推荐,重要,用的最多的)
只要类中存在无参构造即可 如果没有无参构造
Caused by: java.lang.NoSuchMethodException: com.tarena.ioc.Hello.<init>()
2.静态工厂的方式
Factory-method="getInstance" 是Calendar类中的静态方法
结论:
对象不是spring容器new,是通过别的渠道创建完的对象给spring管理
静态工厂特点
把创建完的对象交给spring管理,但并不是由spring创建的
3.实例工厂
4.spring工厂 对象不是spring创建
spring工厂的特点:
把创建完的对象交给spring管理,不是spring创建的
结论:在spring容器,可能会存储很多对象,一定要弄清楚,对象是谁创建的
spring创建对象是单例还是多例 //懒汉式单例
public class Singleton{
private Singleton instance;
public class Singleton{
private Singleton instance;
private Singleton(){
}
public static getInstance(){
If(instace==null){
instance=new Singleton();
}
return instance;
}
}
spring容器默认情况下,对于对象的创建都是单例创建
Spring 单例和多例
spring中的对象初始化方法和销毁方法
在hello.java中添加2个方法
总结:
1.spring容器是用来做对象解耦的
2.在spring容器中实例化对象
对象的声明周期
单例和多例
对象的初始化和销毁
在spring容器实例化对象和管理管理对象