【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容器实例化对象和管理管理对象

 

 

 

 

 

 

posted @ 2018-03-30 22:21  songyao  阅读(310)  评论(0编辑  收藏  举报